我有这个listBox被填充,每个项目可以是男性或女性,具体取决于绑定到listBox的“SEX”属性。 (男性可以是“M”,女性可以是“F”)......
对于每件商品,我想根据列表商品SEX属性显示男性或女性符号。
例如,如果“{Binding SEX}”等于'M':
<Image Source="../Images/male48.png" Visibility="Visible" />
如果“{Binding SEX}”等于'F':
<Image Source="../Images/female48.png" Visibility="Visible" />
我究竟如何才能让它发挥作用?
答案 0 :(得分:17)
解决此问题的一种常见方法是创建一个值转换器,它将绑定返回的值转换为与UI控件的属性相关的其他值。
您可以创建一个转换器来获取性别并将其映射到图像源:
public class SexToSourceConverter : IValueConverter
{
public object Convert(object value, string typeName, object parameter, string language)
{
string url = ((string)value == "M") ? "../Images/male48.png" : "../Images/female48.png";
return new BitmapImage(new Uri(url , UriKind.Relative));
}
public object ConvertBack(object value, string typeName, object parameter, string language)
{
throw new NotImplementedException();
}
}
在XAML中使用它,如下所示:
<Image Source="{Binding Path=Sex, Converter={StaticResource SexToSourceConverter }" />
答案 1 :(得分:4)
如果有人对这可行的方式感兴趣,我已根据 ColinE 的回答制定了解决方案。首先,您要创建一个新类,其中包含您要添加到XAML代码中的条件:
public class MyNiceConverterName : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
// Your conditions here!
return value_you_want_to_return; // E.g., a string, an integer and so on
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException(); // Leave this like here, don't worry
}
}
根据需要调用该类(现在称为MyNiceConverterName
)并使用您要添加到XAML文件的条件实现Convert()
方法。请记住将object value
转换为您正在使用的类型(例如(int)value
,如果它是整数)。
差不多完成了!但还没有,首先在XAML中声明转换器作为资源。您可以在命名空间声明下面粘贴此代码:
<Control.Resources>
<converter:MyNiceConverterName xmlns:converter="clr-namespace:My_Namespace" x:Key="MyNiceConverterName" />
</Control.Resources>
您必须声明您定义类的名称空间(即,删除My_Namespace
与您的名称),并将MyNiceConverterName
重命名为您的类名。键将是在XAML文档中引用转换器的名称,这里我使用了相同的类名,但您可以自由更改它。
最后,是时候使用转换器了。放下这个,你就完成了:
{Binding variable_with_value, Converter={StaticResource MyNiceConverterName}}
请记住将variable_with_value
更改为您要在绑定中使用的那个。
我希望它有所帮助!
答案 2 :(得分:2)
使用binding converter或使用两个triggers。
对于Siverlight this is the correct IValueConverter link,我不确定是否支持触发器。