在 WPF 中动态绑定触发器值

本文关键字:触发器 动态绑定 WPF | 更新日期: 2023-09-27 18:34:06

我正在使用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>

有什么建议吗?如果不是,那么其他解决方法是什么?

在 WPF 中动态绑定触发器值

像这样的东西?

<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