使用数据触发器在WPF中设置ItemsSource属性

时间:2012-05-28 13:04:51

标签: c# .net wpf xaml data-binding

我一直在尝试根据数据触发器绑定的枚举来设置WPF控件的项目源。

我一直非常不满意,我不确定这是正确的做法:

<DataTrigger Binding="{Binding EnumSetting}" Value="Test">
      <Setter TargetName="control" Property="ItemsSource" Value="{Binding Model}" />
</DataTrigger>

我一直在尝试上面的不同版本。任何人都可以帮助或指出我正确的方向。

是否应包装在“&lt;'style'&gt;”中标签,例如,我不认为它应该是,但我不确定为什么这不起作用。

谢谢。

1 个答案:

答案 0 :(得分:5)

主要需要观察DP precedence,这意味着您不能直接在ItemsControl(或其子类)上设置ItemsSource,因为它会覆盖触发器。相反,你应该使用默认的setter。

<ItemsControl>
     <ItemsControl.Style>
          <Style TargetType="ItemsControl">
               <Setter Property="ItemsSource" Value="SomeDefaultHere"/>
               <Style.Triggers>
                   <DataTrigger ...>
                        <Setter Property="ItemsSource" Value="SomeOverrideHere"/>
                   </DataTrigger>
               </Style.Triggers>
          </Style>
    </ItemsControl.Style>
</ItemsControl>

(除非你在某些控件模板的触发器中,否则你可能想要一个样式。)