Wpf 在XAML中动态切换ItemsSource

Wpf 在XAML中动态切换ItemsSource,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,我试图根据viewmodel中属性的值切换treeview的itemssource。我试过下面的代码,但触发器似乎没有触发,有人能告诉我哪里出错了吗 <Window.Resources> <Style x:Key="TreeViewItemSource" TargetType="TreeView"> <Style.Triggers> <DataTrigger Binding="{

我试图根据viewmodel中属性的值切换treeview的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}}" />

以样式设置
项目资源
,否则本地设置值将始终保持优先级

在这里阅读更多关于它的信息-




最重要的是,您已经将ItemsSource设置为样式,并且在转换器的某个地方,您正在将其转换为实际值。这是我看过的最奇怪的东西。如何将样式转换为ItemsSource。重构逻辑并将两者分开,以便以上XAML适合您。

为了解决我的问题,我使用了良好的旧oop…多态性


我在ViewModel中使用了多态结构。现在,我的ItemsSource被绑定到一个IEnumerable列表,其中包含基类…我可以将其等同于任何派生类型

谢谢你的回复,但它仍然不起作用。至于转换器,它根本不进行转换,我使用它来查看触发数据触发器时itemsSource的值。我已经将转换器从xaml中取出,但是它仍然不起作用。如何将样式资源用作TreeView的ItemSource?您需要将其绑定到
IEnumerable
集合。
<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>