WPF Combobox переплет - PullRequest
       5

WPF Combobox переплет

8 голосов
/ 17 марта 2010

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

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

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

Ответы [ 4 ]

10 голосов
/ 17 марта 2010

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

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

Вот пример:

<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>
2 голосов
/ 17 марта 2010

Вам просто нужно установить для свойства IsSynchronizedWithCurrentItem значение false (по умолчанию оно равно null)

1 голос
/ 17 марта 2010

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

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

0 голосов
/ 17 марта 2010

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

т.е.

SelectedItem={Binding SelectedItem1}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...