我正在尝试根据viewmodel中属性的值切换树视图的itemssource。我已经尝试了下面的代码并且触发器似乎没有触发,有人可以告诉我哪里出错了吗?
<Window.Resources>
<Style x:Key="TreeViewItemSource" TargetType="TreeView">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentReportRequested, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="TollFree">
<Setter Property="ItemsSource" Value="{Binding InsertTFSQueryList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<TreeView ItemsSource="{Binding Source={StaticResource TreeViewItemSource}, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DebugConverter}}" />
答案 0 :(得分:2)
在Style中设置 ItemsSource
,否则本地设置值将始终保持优先级。
在此处阅读更多相关信息 - Dependency Property Value Precedence Order。
<Style x:Key="TreeViewItemSource" TargetType="TreeView">
<!-- Set ItemsSource here but you need to separate Style out of it. -->
<Setter Property="ItemsSource"
Value="{Binding Source={StaticResource TreeViewItemSource},
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource DebugConverter}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentReportRequested, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
Value="TollFree">
<Setter Property="ItemsSource" Value="{Binding InsertTFSQueryList,
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTrigger>
</Style.Triggers>
</Style>
最重要的是,您已将ItemsSource设置为Style,并将其设置为转换器中的某个位置,您将其转换为实际值。这是我看过的最奇怪的事情。样式如何可转换为ItemsSource。重构逻辑并将两者分开,以便上面的XAML适合你。
答案 1 :(得分:1)
为了解决我的问题,我使用了古老的oop ...多态性。
我在ViewModel中使用了多态结构。现在我的ItemsSource绑定到一个IEnumerable列表,该列表包含基类...我可以将其等同于任何派生类型。