Wpf 什么';这是正确的方法<;图像源="/Images/{Binding Path=Id}.jpg"/>;?
我有一个员工ID和一个与中该员工关联的图像,作为项目中的资源(该图像显示在员工姓名旁边的列表中) 我想是这样的Wpf 什么';这是正确的方法<;图像源="/Images/{Binding Path=Id}.jpg"/>;?,wpf,data-binding,Wpf,Data Binding,我有一个员工ID和一个与中该员工关联的图像,作为项目中的资源(该图像显示在员工姓名旁边的列表中) 我想是这样的 <DataTemplate DataType="{x:Type m:Employee}"> <Grid> <Image Grid.Column="0" Name="image" Source="../Images/{Binding Path=Id}.jpg"/> 它不是有效的XAML 我想我可以在code
<DataTemplate DataType="{x:Type m:Employee}">
<Grid>
<Image Grid.Column="0" Name="image" Source="../Images/{Binding Path=Id}.jpg"/>
它不是有效的XAML
我想我可以在codebehind中处理一些数据绑定事件并在那里创建路径?对我来说并不理想
我可以将路径存储在Employee类中,但这太糟糕了。您必须使用
IValueConverter
下面是一个传递字符串.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中……如果你想把它全部保存在xaml中,你必须使用基于Id值的DataTriggers<代码>。另外,请改用支持透明性的PNG。您的场景正是绑定转换器的用途。对话进行到很晚,但我认为不应该为了在XAML中完成所有工作而选择XAML。为此目的创建了价值转换器。下一个最好的方法是实现自定义标记扩展,它允许您在标记中使用自定义逻辑,但您仍然会在某些地方依赖C#代码。试图将其保存为XAML不可避免地会导致不必要和混乱的标记。希望
StringFormat
可以直接在主绑定上工作,但它似乎只有在目标属性类型为string
时才起作用+1用于隐藏文本的有趣替代方案,即使我永远不会使用它;)我使用了这个转换器解决方案。我想知道为什么隐藏文本块不是最佳实践。我是WPF的新手,听到为什么不做这样的事情会很高兴。谢谢
<Grid>
<TextBlock x:Name="StringToImage" Visibility="Hidden" Text="{Binding Id, StringFormat=../Images/{0}.jpg}" />
<Image Source="{Binding Text, ElementName=StringToImage}"/>
</Grid>