Datagrid multitrigger引用代码隐藏的值

时间:2012-05-03 13:45:55

标签: c# wpf datagrid triggers local-variables

我在WPF中仍然是血腥的绿色,还没有完全掌握它背后的概念。我有以下问题:

我想根据前提条件在数据网格中设置触发器。

示例:

在我的代码隐藏中,我有一个字符串变量,我们称之为variableString。现在,根据variableString的值,我想在数据网格中启用/禁用触发器,我在XAML中定义了:

if(variableString == "a") 

然后

XAML

<DataGrid AutoGenerateColumns="False" Margin="5,5,0,75" Name="dataGrid1" ItemsSource="Binding}">
  <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
             <Style.Triggers>
                  <DataTrigger Binding="{Binding Path=SomeColumnName}" Value="someValue">
                  <Setter Property="Background" Value="White"/>
                  <DataTrigger Binding="{Binding Path=SomeColumName}" Value="someOtherValue">
                  <Setter Property="Background" Value="Red"/>
             </Style.Triggers>
        </Style>
   </DataGrid.ItemContainerStyle>

否则,如果

if(variableString == "b")

然后

Do Nothing`

我已经尝试将字符串绑定到datagrid的datacontext,但这样做相当矛盾,因为它删除了我对数据库的绑定。

任何人都可以帮助我。一个例子,向正确的方向推进等......

我非常喜欢WPF给你的选项,但是在WinForms中很容易处理的基本内容让我对WPF感到生气。

由于

1 个答案:

答案 0 :(得分:1)

我认为您需要一个MultiDataTrigger,它允许您根据多个值启动触发器

  <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=SomeColumnName}" Value="someValue" />
      <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=variableString}" Value="A" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="White" />
  </MultiDataTrigger>

要在后面的代码中找到您的字符串,您可能必须使用某种RelativeSource绑定来查找包含该属性的类。我的示例假设variableString

上有一个名为Window的公共属性