2010-03-16 3 views
8

У меня есть два Combobox, и оба они имеют привязку к одному и тому же источнику.WPF Combobox binding

<ComboBox ItemsSource="{Binding Source={StaticResource UsersViewSource}}" 

И когда я что-то меняю в первом, он отражает также и второй. И я не знаю, как сохранить свои значения SelectedItem отдельно, используя тот же ItemSource.

ответ

10

Свойство IsSynchronizedWithCurrentItem должен быть установлен в значение False:

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

Вот пример:

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:sys="clr-namespace:System;assembly=mscorlib" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
     <x:Array x:Key="myStrings" Type="sys:String"> 
     <sys:String>one</sys:String> 
     <sys:String>two</sys:String> 
     <sys:String>three</sys:String> 
     <sys:String>four</sys:String> 
     <sys:String>five</sys:String> 
     </x:Array> 
    </Page.Resources> 

<StackPanel Width="200"> 
    <ComboBox IsSynchronizedWithCurrentItem="False" Margin="25" 
    ItemsSource="{Binding Source={StaticResource myStrings}}" /> 

    <ComboBox IsSynchronizedWithCurrentItem="False" Margin="25" 
    ItemsSource="{Binding Source={StaticResource myStrings}}" /> 
</StackPanel> 

</Page> 
+3

Ирония вашего ответа заключается в том, что, как объясняет ваша цитата, 'IsSynchronizedWithCurrentItem =" False "' в вашем цитируемом коде совершенно не нужно, потому что вы не привязываетесь к 'CollectionView'. Если вы выберете эти атрибуты, выпадающие списки все еще не связаны. –

+0

Согласен, что это не лучший пример, но установите значение True, и они синхронизируются, как если бы они были связаны с CollectionView (мое предположение). Если на самом деле это не работает с CollectionView, тогда все будет в порядке, я удалю ответ и уйду, узнав что-то сам. –

+0

Сконструировал быстрый проект и проверил, будет ли свойство IsSynchronizedWithCurrentItem работать с CollectionView, и оно действительно работает. По общему признанию, мой ответ не совсем корректен, но он обеспечивает быстрый пример Kaxaml;) –

0

Вы можете отдельно привязать свойство SelectedItem для каждого поля со списком отдельно.

т.е.

SelectedItem={Binding SelectedItem1} 

Таким образом, когда элемент каждого из них получает набор, он получает хранится в другом месте.

1

Я предположил бы, что (от имени вашего связывания), что причина, это происходит в том, что вы связываете с CollectionViewSource (который оборачивает коллекция). Этот класс является прокси-сервером, который использует WPF, который включает (среди прочего) выбранный элемент коллекции. Очевидно, что если вы делитесь этой коллекцией между двумя списками, вы также делите выбранный элемент.

Если вы установили ItemsSource к чему-то, что это не CollectionViewSource, управление автоматически завернуть его в одном. Итак, мое предложение состояло в том, чтобы связать непосредственно с коллекцией, а не с оберткой в ​​CollectionViewSource, или, в качестве альтернативы, создать два экземпляра CollectionViewSource, по одному для каждого ComboBox.