两个具有相同CollectionViewSource ItemSource的组合框相互更新

时间:2012-09-11 10:02:00

标签: wpf xaml data-binding collectionviewsource

在我的ViewModel上,我有2个属性(都实现了属性更改通知):

CountryOfIssue
Nationality

在我的View上,我有一个指向我的Entity Framework上下文的本地实例的CollectionViewSource:

<CollectionViewSource x:Key="cvsCountries" Source="{Binding LocalContext.Countries}" CollectionViewType="{x:Type ListCollectionView}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="Name" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

同样在这个页面上,我有两个组合框用于设置CountryOfIssue和国籍的值:

<ComboBox IsEnabled="{Binding CanEditCountryOfIssue}" ItemsSource="{Binding Source={StaticResource cvsCountries}}" DisplayMemberPath="Name" SelectedValuePath="Id" SelectedItem="{Binding CountryOfIssue, Mode=TwoWay, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True}" />

<ComboBox IsEnabled="{Binding CanEditNationality}" ItemsSource="{Binding Source={StaticResource cvsCountries}}" DisplayMemberPath="Name" SelectedValuePath="Id" SelectedItem="{Binding Nationality, Mode=TwoWay, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True}" />

通过这种设置,每当我改变其中一个组合框的值时,另一个也会改变...这是预期的行为吗?

(我已经使用另一个CollectionViewSource实现了修复,我只是想知道这是否正常)

1 个答案:

答案 0 :(得分:12)

这是正常的,CollectionViewsCurrentItem,如果ItemsSourceCollectionView,他们会同步,请参阅IsSynchronizedWithCurrentItem

  如果SelectedItem始终与ItemCollection中的当前项同步,则

true ;如果SelectedItem从未与当前项同步,则 false ; null 如果SelectedItem仅与Selector使用CollectionView,则{{3}}与当前项同步。默认值为 null

因此,您可以通过将该属性设置为false来手动关闭它。

(顺便说一句,您还可以通过斜杠绑定到CurrentItem的{​​{1}}。例如CollectionView绑定到当前人员的People/Name属性Name。)