2012-09-11 2 views
7

На мой ViewModel, у меня есть 2 свойства (как реализовать свойство изменилось уведомлений):Два ComboBoxes с тем же CollectionViewSource ItemSource обновления друг друга

CountryOfIssue 
Nationality 

На мой взгляд, у меня есть CollectionViewSource указывая на локальный экземпляр мой Entity Framework контекст:

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

Также на этой странице, у меня есть два ComboBoxes используется для установки значения 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}" /> 

С помощью этой настройки, когда я меняю одно из значений comboboxes, меняется и другое ... Это ожидаемое поведение?

(я реализовал исправление с помощью другого CollectionViewSource, я просто хочу знать, если это нормально)

ответ

10

Это нормально, CollectionViews имеют CurrentItem и если ItemsSource является CollectionView они синхронизируются см IsSynchronizedWithCurrentItem:

верно если SelectedItem всегда синхронизирован с текущим элементом в ItemCollection; false, если SelectedItem никогда не синхронизируется с текущим элементом; null если SelectedItem синхронизирован с текущим элементом, только если Selector использует CollectionView. Значение по умолчанию: null.

Поэтому вы можете просто отключить его вручную, установив это свойство на false.

(Кстати, вы также можете привязать к CurrentItem из CollectionView через слэш. Например People/Name связывается с Name свойства текущего человека в People.)

+0

что это сделал .... – grimstoner

+0

этот помог мне, когда у меня было несколько элементов «ComboBox» в ячейках столбца «DataGrid», а новый экземпляр «CollectionViewSource» заставлял их при каждом изменении их одинакового значения. – Dan

Смежные вопросы