WPF Combobox绑定

时间:2010-03-16 21:49:56

标签: wpf binding combobox

我有两个Comboboxes,它们都绑定了同一个源。

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

当我在第一个中改变某些东西时,它也会反映到第二个。我不知道如何使用相同的ItemsSource分别保留他们的SelectedItem值。

4 个答案:

答案 0 :(得分:10)

IsSynchronizedWithCurrentItem属性应设置为False:

  

如果SelectedItem始终为true,则为true   与当前项目同步   ItemCollection;如果是假的   SelectedItem永远不会同步   与当前项目;如果是null   SelectedItem与。同步   仅当Selector使用时的当前项   一个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>

答案 1 :(得分:2)

您只需将IsSynchronizedWithCurrentItem属性设置为false(默认情况下为null)

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

SelectedItem={Binding SelectedItem1}

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