在WPF中绑定触发器值动态

时间:2014-12-12 12:58:26

标签: c# wpf data-binding triggers styles

我正在使用ListViewGridView以表格格式显示数据:

<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>

有什么建议吗?如果没有那么其他的工作是什么?

2 个答案:

答案 0 :(得分:1)

使用Converter代替Trigger。将Background绑定到RiskName并编写一个返回Brush的转换器,该值由RiskName确定。

链接到MSDN以获取您需要使用的界面IValueConverter - http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter%28v=vs.110%29.aspx

转换器良好教程的链接:http://wpftutorial.net/ValueConverters.html

答案 1 :(得分:1)

这样的东西?

<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];
   }
}