2010-03-16 20 views
8

Ich habe zwei Comboboxen und beide haben Bindung mit der gleichen Quelle.WPF Combobox Bindung

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

Und wenn ich etwas in der ersten ändern, spiegelt es sich auch auf die zweite. Und ich weiß nicht, wie Sie ihre SelectedItem-Werte getrennt aufbewahren und dieselbe ItemsSource verwenden.

Antwort

10

Die IsSynchronizedWithCurrentItem Eigenschaft sollte auf False festgelegt werden:

true, wenn die SelectedItem immer mit dem aktuellen synchronisiert ist Artikel in die ItemCollection; false, wenn SelectedItem nie mit dem aktuellen Element synchronisiert wird; null, wenn SelectedItem nur dann mit dem aktuellen Element synchronisiert wird, wenn der Selector eine CollectionView verwendet. Der Standardwert ist null.

Hier ist ein Beispiel:

<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

Die Ironie Ihrer Antwort ist, dass - wie Ihr Zitat erklärt - das 'IsSynchronizedWithCurrentItem =" False "' in Ihrem zitierten Code völlig unnötig ist, weil Sie nicht an ein 'CollectionView' binden. Wenn Sie diese Attribute entfernen, sind die Comboboxen immer noch nicht verknüpft. –

+0

Vereinbart, dass es möglicherweise nicht das beste Beispiel ist, aber den Wert auf True setzen und sie synchronisieren, als ob sie an eine CollectionView gebunden wären (meine Annahme). Wenn das in der Tat nicht mit einem CollectionView funktioniert, dann sollte ich die Antwort löschen und etwas lernen. –

+0

Warf zusammen ein schnelles Projekt und getestet, um zu sehen, ob die IsSynchronizedWithCurrentItem -Eigenschaft mit einer CollectionView funktioniert und es tatsächlich funktioniert. Zugegeben, meine Antwort ist nicht genau richtig, aber es liefert ein schnelles Kaxaml-Beispiel;) –

0

Sie können die SelectedItem-Eigenschaft für jedes Kombinationsfeld separat separat binden.

heißt

SelectedItem={Binding SelectedItem1} 

diese Weise, wenn jedes Einzelteils eins gesetzt wird, es an einem anderen Ort gespeichert wird.

1

Ich denke, würde (aus dem Namen Ihrer Bindung), dass der Grund, warum dies geschieht, ist, dass man zu einem CollectionViewSource sind verbindlich (die eine hüllt Sammlung). Diese Klasse ist ein Proxy, den WPF verwendet, der (unter anderem) das ausgewählte Element einer Sammlung enthält. Wenn Sie diese Sammlung für zwei Comboboxen freigeben, teilen Sie das ausgewählte Element natürlich mit anderen.

Wenn Sie ItemsSource auf etwas setzen, das nicht ein CollectionViewSource ist, wickeln die Steuerung automatisch in einem. Mein Vorschlag wäre also, direkt an eine Sammlung zu binden, anstatt sie in eine CollectionViewSource - oder alternativ zwei CollectionViewSource Instanzen zu kopieren, eine für jede ComboBox.