2010-03-16 12 views
8

Tengo dos cuadros combinados y ambos tienen enlace con la misma fuente.WPF Combobox vinculante

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

Y cuando cambio algo en el primero, también se refleja en el segundo. Y no sé cómo mantener sus valores de SelectedItem por separado, utilizando el mismo ItemsSource.

Respuesta

10

La propiedad IsSynchronizedWithCurrentItem se debe establecer en falso:

cierto si el SelectedItem es siempre sincronizada con la corriente artículo en la Colección de Artículos; falso si el elemento seleccionado nunca se sincroniza con el elemento actual; null si SelectedItem se sincroniza con el elemento actual solo si el Selector usa un CollectionView. El valor predeterminado es nulo.

He aquí una muestra:

<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

La ironía de su respuesta es que, como explica su cita, el 'IsSynchronizedWithCurrentItem =" False "' en su código entre comillas es completamente innecesario, porque no está vinculando a un 'CollectionView'. Si saca esos atributos, los cuadros combinados aún no están vinculados. –

+0

Estoy de acuerdo en que puede no ser el mejor ejemplo, pero establezco el valor en True y se sincronizan como si estuvieran vinculados a un CollectionView (mi suposición). Si de hecho esto no funciona con un CollectionView, entonces sé de todos modos que borraré la respuesta y me iré aprendiendo algo por mí mismo. –

+0

Se lanzó un proyecto rápido y se probó para ver si la propiedad IsSynchronizedWithCurrentItem funciona con un CollectionView y de hecho funciona. Es cierto que mi respuesta no es exactamente correcta, pero proporciona un rápido ejemplo de Kaxaml;) –

0

Puede enlazar separadamente la propiedad SelectedItem para cada cuadro combinado por separado.

decir

SelectedItem={Binding SelectedItem1} 

esta manera, cuando una pieza de cada uno consigue el sistema, que se almacena en un lugar diferente.

1

supongo (del nombre de su unión) que la razón de esto está sucediendo es que estás unión a un CollectionViewSource (que envuelve una colección). Esta clase es un proxy que utiliza WPF que incluye (entre otras cosas) el elemento seleccionado de una colección. Obviamente, si comparte esta colección entre dos cuadros combinados, también está compartiendo el elemento seleccionado.

Si establece ItemsSource a algo que es no un CollectionViewSource, el control se ajustará automáticamente en uno. Por lo tanto, mi sugerencia sería enlazar directamente a una colección en lugar de envolver en un CollectionViewSource o, alternativamente, crear dos instancias CollectionViewSource, una para cada ComboBox.