Wpf 如何在ListBox.ItemsSource的两个数据源之间切换

Wpf 如何在ListBox.ItemsSource的两个数据源之间切换,wpf,binding,itemscontrol,multibinding,Wpf,Binding,Itemscontrol,Multibinding,将ItemsControl.ItemsSource绑定到给定属性的不同源的最佳方式是什么 绑定应仅对2个集合中的一个进行,ItemsControl绑定到的集合的选择应基于某些属性 我有一个绑定到ViewModel的视图。 我要绑定到的集合位于该ViewModel下的不同层次路径中 我有一个基于多重绑定的解决方案,但我认为应该有更优雅的解决方案 <CollectionViewSource x:Key="CVS"> <CollectionViewSource.Sourc

将ItemsControl.ItemsSource绑定到给定属性的不同源的最佳方式是什么

绑定应仅对2个集合中的一个进行,ItemsControl绑定到的集合的选择应基于某些属性

我有一个绑定到ViewModel的视图。 我要绑定到的集合位于该ViewModel下的不同层次路径中

我有一个基于多重绑定的解决方案,但我认为应该有更优雅的解决方案

<CollectionViewSource x:Key="CVS">
      <CollectionViewSource.Source  >
          <MultiBinding Converter="{StaticResource myMultiBindingConverter}">
              <Binding  Path="XXXX.YYYY.ObservableCollection1"  />
              <Binding Path="XXXX.ObservableCollection2" />                    
          </MultiBinding>
      </CollectionViewSource.Source>                            
</CollectionViewSource>

<ListBox  x:Name="myListBox"                                   
          ItemsSource="{Binding Source={StaticResource CVS}}" />

DataTrigger
在这里可能更合适,因为您希望基于另一个值更改
ItemsSource
绑定

<Style x:Key="MyListBoxStyle" TargetType="ListBox">
    <Setter Property="ItemsSource" Value="{Binding XXX.ObservableCollection2}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding SomeValue}" Value="SecondCollection">
            <Setter Property="ItemsSource" Value="{Binding XXX.YYY.ObservableCollection2}" />
        </DataTrigger>
    </Style.Triggers>
</Style>


与转换器不同,每当触发值更改时,
DataTrigger
将正确地重新计算a
DataTrigger
可能在这里更合适,因为您希望基于另一个值更改
ItemsSource
绑定

<Style x:Key="MyListBoxStyle" TargetType="ListBox">
    <Setter Property="ItemsSource" Value="{Binding XXX.ObservableCollection2}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding SomeValue}" Value="SecondCollection">
            <Setter Property="ItemsSource" Value="{Binding XXX.YYY.ObservableCollection2}" />
        </DataTrigger>
    </Style.Triggers>
</Style>


与转换器不同,
DataTrigger
将在触发值更改时正确地重新计算

为什么不让
ViewModel
包含组合两个集合的属性?毕竟,它应该对视图进行建模:)@Rachel我只希望绑定到这两个集合中的一个,条件是我希望能够选择它是哪个集合在这种情况下,
DataTrigger
在这里可能更合适,当您的条件发生变化时,它将正确地重新计算
ItemsSource
属性。@Rachel DataTrigger是将其添加为答案的正确方法,我接受它的结论,它已添加为答案:)为什么
ViewModel
不包含一个组合两个集合的属性?毕竟,它应该对视图进行建模:)@Rachel我只希望绑定到这两个集合中的一个,条件是我希望能够选择它是哪个集合在这种情况下,
DataTrigger
在这里可能更合适,因为当您的条件发生变化时,它将正确地重新计算
ItemsSource
属性。@Rachel DataTrigger是将其添加为答案的正确方法,我接受它的结论,它已添加为答案:)