12

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

CountryOfIssue
Nationality

在我的视图中,我有一个 CollectionViewSource 指向我的实体框架上下文的本地实例:

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

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

<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 实现了修复,我只是想知道这是否正常)

4

1 回答 1

16

这是正常的,CollectionViews有 aCurrentItem并且如果ItemsSource是 aCollectionView他们得到同步,请参阅IsSynchronizedWithCurrentItem

如果SelectedItem始终与ItemCollection中的当前项同步,则为true;如果SelectedItem从未与当前项目同步,则为false ;仅当Selector使用CollectionView时,如果SelectedItem与当前项目同步,则为null。默认值为null

因此,您可以通过将该属性设置为false.

(顺便说一句,您还可以通过斜杠绑定到 a 的 。例如CurrentItem,绑定到中的当前人员的属性。)CollectionViewPeople/NameNamePeople

于 2012-09-11T10:54:47.050 回答