13

我有这个被填充的列表框,每个项目可以是男性或女性,具体取决于绑定到列表框的“SEX”属性。(可以是男性的“M”和女性的“F”)......

对于每个项目,我想根据列表项目的 SEX 属性显示男性或女性符号。

例如,如果“{Binding SEX}”等于“M”:

<Image Source="../Images/male48.png" Visibility="Visible" />

如果“{Binding SEX}”等于“F”:

<Image Source="../Images/female48.png" Visibility="Visible" />

我究竟将如何让它发挥作用?

4

3 回答 3

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 }" />
于 2012-07-09T12:58:38.977 回答
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)并Convert()使用您希望添加到 XAML 文件的条件来实现该方法。请记住将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为您想在绑定中使用的那个。

我希望它有帮助!

于 2013-10-03T13:41:34.573 回答
2

要么使用绑定转换器,要么使用两个触发器

对于 Siverlight ,这是正确的 IValueConverter 链接,我不确定是否支持触发器。

于 2012-07-09T12:54:33.147 回答