首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XAML代码编写条件语句

用XAML代码编写条件语句
EN

Stack Overflow用户
提问于 2012-07-09 20:49:08
回答 3查看 13.1K关注 0票数 13

我有这个填充的listBox,根据绑定到listBox的“性别”属性,每个项目都可以是男性或女性。(可以是'M‘代表男性,'F’代表女性)...

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

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

代码语言:javascript
复制
<Image Source="../Images/male48.png" Visibility="Visible" />

如果“{绑定性}”等于'F':

代码语言:javascript
复制
<Image Source="../Images/female48.png" Visibility="Visible" />

我该怎么做才能让它工作呢?

EN

回答 3

Stack Overflow用户

发布于 2012-07-09 20:58:39

解决此问题的一种常见方法是创建一个值转换器,它将绑定返回的值转换为与UI控件的属性相关的其他值。

您可以创建一个接受性别并将其映射到图像源的转换器:

代码语言:javascript
复制
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中使用它,如下所示:

代码语言:javascript
复制
<Image Source="{Binding Path=Sex, Converter={StaticResource SexToSourceConverter }" />
票数 17
EN

Stack Overflow用户

发布于 2013-10-03 21:41:35

如果有人对如何工作感兴趣,我已经根据ColinE的答案做了一个解决方案。首先,您必须创建一个新类,其中包含您希望添加到XAML代码中的条件:

代码语言:javascript
复制
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中将转换器声明为资源。您可以将此代码粘贴到名称空间声明的下面:

代码语言:javascript
复制
<Control.Resources>
    <converter:MyNiceConverterName xmlns:converter="clr-namespace:My_Namespace" x:Key="MyNiceConverterName" />
</Control.Resources>

您必须声明定义类的名称空间(即,使用您的名称删除My_Namespace ),并将MyNiceConverterName重命名为您的类名。关键字将是为引用XAML文档中的转换器而定义的名称,在这里我使用了相同的类名,但您可以自由更改它。

最后,是时候使用转换器了。把这个放进去,你就完成了:

代码语言:javascript
复制
{Binding variable_with_value, Converter={StaticResource MyNiceConverterName}}

请记住将variable_with_value更改为您希望在绑定中使用的use。

我希望它能有所帮助!

票数 4
EN

Stack Overflow用户

发布于 2012-07-09 20:54:33

使用一个binding converter或使用两个triggers

对于Siverlight this is the correct IValueConverter link,我不确定是否支持触发器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11395349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档