5

我有一个员工 ID 和一个与该员工关联的图像作为项目中的资源(图像显示在员工姓名旁边的列表中)。

所以我认为是这样的

<DataTemplate DataType="{x:Type m:Employee}">
        <Grid>
            <Image Grid.Column="0" Name="image" Source="../Images/{Binding Path=Id}.jpg"/>

它不是有效的 XAML。

我想我可以在代码隐藏中处理一些数据绑定事件并在那里创建路径?对我来说似乎并不理想。

我可以将路径存储在我的 Employee 类中,但这太糟糕了。

4

1 回答 1

9

您将不得不使用IValueConverter

这是一个简单的示例,传入 aString.Format作为转换器参数

public class StringFormatToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (parameter is string)
        {
            return string.Format(parameter.ToString(), value);
        }
        return null;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

用法:

<XXXX.Resources>
    <local:StringFormatToImageSourceConverter x:Key="StringToImage" />
</XXXX.Resources>

<Image Source="{Binding Path=Id, Converter={StaticResource StringToImage}
     , ConverterParameter=../Images/{0}.jpg}" />

有一种方法可以Xaml通过使用不可见TextBlock来格式化字符串来保留它,但不是最佳实践。

<Grid>
    <TextBlock x:Name="StringToImage" Visibility="Hidden" Text="{Binding Id, StringFormat=../Images/{0}.jpg}" />
    <Image Source="{Binding Text, ElementName=StringToImage}"/>
</Grid>
于 2013-03-23T00:00:04.920 回答