在我的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实现了修复,我只是想知道这是否正常)
答案 0 :(得分:12)
这是正常的,CollectionViews
有CurrentItem
,如果ItemsSource
是CollectionView
,他们会同步,请参阅IsSynchronizedWithCurrentItem
:
如果SelectedItem始终与ItemCollection中的当前项同步,则true ;如果SelectedItem从未与当前项同步,则 false ; null 如果SelectedItem仅与Selector使用CollectionView,则{{3}}与当前项同步。默认值为 null 。
因此,您可以通过将该属性设置为false
来手动关闭它。
(顺便说一句,您还可以通过斜杠绑定到CurrentItem
的{{1}}。例如CollectionView
绑定到当前人员的People/Name
属性Name
。)