在XAML代码中编写条件语句

时间:2012-07-09 12:49:08

标签: silverlight windows-phone-7 xaml conditional-statements

我有这个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" />

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

3 个答案:

答案 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,我不确定是否支持触发器。