2010-03-16 153 views
8

我得到了两个Comboboxes,并且它们都绑定了相同的Source。WPF Combobox绑定

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

而当我改变了第一个东西的时候,它也反映了第二个。我不知道如何使用相同的ItemsSource单独保留SelectedItem值。

回答

10

IsSynchronizedWithCurrentItem属性应设置为False:

如果属实的的SelectedItem总是 与当前同步项目 ItemCollection;如果 SelectedItem不会与当前项目同步 ,则返回false;如果 SelectedItem与 当前项目同步,则仅当选择器使用CollectionView时使用 时为null。默认值为 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”。如果将这些属性取出,组合框仍未链接。 – 2010-03-16 23:23:49

+0

同意它可能不是最好的例子,但将值设置为True,并且它们同步,就好像它们绑定到一个CollectionView(我的假设)。如果确实这不适用于CollectionView,那么请尽我所能删除答案并离开学习自己的东西。 – 2010-03-17 00:01:57

+0

把一个快速项目扔在一起,并进行测试,看看IsSynchronizedWithCurrentItem属性是否可以与一个CollectionView一起工作,它确实有效。诚然,我的答案并不完全正确,但它确实提供了一个快速的Kaxaml示例;) – 2010-03-17 01:36:54

0

您可以单独为每个组合框单独绑定SelectedItem属性。

SelectedItem={Binding SelectedItem1} 

这样,当每个人的项目被设定,它被存储到不同的地方。

1

我猜(从名字你的绑定),这是发生的原因是,你绑定到CollectionViewSource(一个包装了采集)。此类是WPF使用的代理,其中包括(除其他之外)集合中选定的项目。显然,如果你在两个组合框之间共享这个集合,那么你也会共享选定的项目。

如果您将ItemsSource设置为而不是 a CollectionViewSource,控件将自动将其包装为一个。因此,我的建议是直接绑定到集合,而不是包装在CollectionViewSource中 - 或者,也可以创建两个CollectionViewSource实例,每个实例一个ComboBox