Silverlight 在XAML代码中编写条件语句
我有一个填充的列表框,根据绑定到列表框的“SEX”属性,每个项目可以是男性或女性。(男性可以是“M”,女性可以是“F”) 对于每个项目,我想根据列表项目的性别属性显示一个男性或女性符号 例如,如果“{Binding SEX}”等于'M':Silverlight 在XAML代码中编写条件语句,silverlight,windows-phone-7,xaml,conditional-statements,Silverlight,Windows Phone 7,Xaml,Conditional Statements,我有一个填充的列表框,根据绑定到列表框的“SEX”属性,每个项目可以是男性或女性。(男性可以是“M”,女性可以是“F”) 对于每个项目,我想根据列表项目的性别属性显示一个男性或女性符号 例如,如果“{Binding SEX}”等于'M': <Image Source="../Images/male48.png" Visibility="Visible" /> 如果“{Binding SEX}”等于'F': <Image Source="../Images/female48
<Image Source="../Images/male48.png" Visibility="Visible" />
如果“{Binding SEX}”等于'F':
<Image Source="../Images/female48.png" Visibility="Visible" />
我要怎样才能让它工作呢?要么使用a,要么使用两个
对于Siverlight,我不确定是否支持触发器。解决此问题的常见方法是创建值转换器,它将绑定返回的值转换为与UI控件属性相关的其他值 您可以创建一个转换器,用于获取性别并将其映射到图像源:
公共类SexToSourceConverter:IValueConverter
{
公共对象转换(对象值、字符串类型名、对象参数、字符串语言)
{
字符串url=((字符串)值==“M”)?“./Images/male48.png”:“./Images/female48.png”;
返回新的位图图像(新的Uri(url,UriKind.Relative));
}
公共对象转换回(对象值、字符串类型名、对象参数、字符串语言)
{
抛出新的NotImplementedException();
}
}
在XAML中使用它,如下所示:
<Image Source="{Binding Path=Sex, Converter={StaticResource SexToSourceConverter }" />
如果有人对这项技术的工作方式感兴趣,我已经根据科林的回答提出了一个解决方案。首先,您必须创建一个新类,其中包含要添加到XAML代码中的条件:
公共类MyNiceConverterName:IValueConverter{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性){
//你在这里的条件!
返回值\u您希望\u返回;//例如,字符串、整数等
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性){
抛出新的NotImplementedException();//像这样保留这个,不要担心
}
}
调用该类(现在称为MyNiceConverterName
),并使用要添加到XAML文件的条件实现Convert()
方法。记住将对象值
强制转换为您正在使用的类型(例如,(int)值,如果它是整数)
这差不多完成了!但还没有,首先在XAML中将转换器声明为资源。您可以将此代码粘贴到名称空间声明下面:
<Control.Resources>
<converter:MyNiceConverterName xmlns:converter="clr-namespace:My_Namespace" x:Key="MyNiceConverterName" />
</Control.Resources>
请记住将变量\u与\u值一起更改为您希望在绑定中使用的值
我希望有帮助 Silverlight for WP7不支持AFAIK触发器。binding converter/IValueConverter的建议很好。我相信触发器在wp7中工作,Caliburn Micro actions不是这样工作的吗?我可能是错的。你不能绑定image Source属性并在视图模型中具有复杂性吗?太棒了,非常感谢!不过只有一个问题。在我的XAML中使用它的地方,末尾是否缺少一个额外的扭曲支撑?e、 g..SexToSourceConverter}}“我还收到了以下错误声明:错误1'Pathportal.SexToSourceConverter'未实现接口成员'System.Windows.Data.IValueConverter.ConvertBack(对象、系统.Type、对象、系统.Globalization.CultureInfo)“…有什么想法吗?当使用MVVM时,我们从来没有使用过ValueConverters,您已经能够在VM中转换值了,那么为什么还要使用额外的类呢?我们最终将使用几十个转换器或过于复杂的转换器,它们试图做得太多,因此可以在稍微不同的环境中重复使用contexts@BenCr1.你是个笨蛋假设OP使用的是MVVM。2.VM应该知道视图使用的是哪些状态的图像,这会破坏视图的封装。@ColinE 1.在ConvertBack方法中,您可以返回Binding.DoNothing。2.您不认为应该让OP自己学习如何编写转换器吗?谢谢,您救了我一命时间太长了。
{Binding variable_with_value, Converter={StaticResource MyNiceConverterName}}