在 WPF 中动态绑定触发器值
本文关键字:触发器 动态绑定 WPF | 更新日期: 2023-09-27 18:34:06
我正在使用ListView
和GridView
以表格格式显示数据:
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Risk" Width="150" DisplayMemberBinding="{Binding RiskName}" />
</GridView>
</ListView.View>
我必须根据RiskName
更改背景颜色。例如,如果RiskName
为"高",则背景为红色,如果RiskName
为"中",则背景为"黄色",依此类推。
我添加了样式以及触发器以根据值设置背景,
<Trigger Property="Text" Value="High">
<Setter Property="Background" Value="Red"/>
</Trigger>
<Trigger Property="Text" Value="Medium">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
它工作正常,但就我而言,RiskName
的文本不是恒定的。价值是动态的。在 WPF 中,有什么方法可以动态设置触发器属性的值,看起来像这样?
<Trigger Property="Text" Value="{Binding RiskName}">
<Setter Property="Background" Value="{Binding RiskBrush}"/>
</Trigger>
有什么建议吗?如果不是,那么其他解决方法是什么?
像这样的东西?
<converters:MyBrushLookupConverter x:Key="brushLookup" BrushDictionary="{Binding KeyedBrushes}" />
MyBrushLookupConverter看起来像什么样
子public class MyBrushLookupConverter : DependencyObject, IValueConverter
{
// This is a dependency property - dependency property gumf omitted for brevity
public Dictionary<string, Brush> BrushDictionary {get; set;}
// Convert method
public Convert(object value, ...)
{
return BrushDictionary[(string)value];
}
}
使用Converter
而不是Trigger
。将Background
绑定到RiskName
并编写一个转换器,该转换器返回由 RiskName
的值确定的Brush
。
链接到 MSDN 以获取您需要使用的接口 IValueConverter
- http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter%28v=vs.110%29.aspx
指向有关转换器的优秀教程的链接:http://wpftutorial.net/ValueConverters.html