C# 在WPF中动态绑定触发器值
我正在使用C# 在WPF中动态绑定触发器值,c#,wpf,data-binding,triggers,styles,C#,Wpf,Data Binding,Triggers,Styles,我正在使用ListView和GridView以表格格式显示数据: <ListView> <ListView.View> <GridView> <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Risk" Width="150" DisplayMember
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
的文本不是常量。这个值是动态的。在WPF中,是否有任何方法可以动态设置触发器属性的值,如下所示
<Trigger Property="Text" Value="{Binding RiskName}">
<Setter Property="Background" Value="{Binding RiskBrush}"/>
</Trigger>
有什么建议吗?如果没有,那么其他解决方法是什么?使用
转换器
而不是触发器
。将Background
绑定到RiskName
并编写一个转换器,返回由RiskName
的值确定的Brush
链接到MSDN以获取需要使用的接口IValueConverter
-
一个关于转换器的好教程的链接:类似的内容
<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];
}
}
公共类MyBrushLookupConverter:DependencyObject,IValueConverter
{
//这是一个依赖属性-为了简洁起见,省略了依赖属性gumf
公共词典{get;set;}
//转换方法
公共转换(对象值,…)
{
返回BrushDictionary[(字符串)值];
}
}
感谢您的建议,但使用转换器方法,我还需要在c代码中硬编码值,如if RiskName高于return Red brush等,这与上面的硬编码触发器相同。是否有映射到RiskName
的颜色列表存储在您的模型中?i、 e.RiskName
到颜色的映射是什么?
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];
}
}