我有两个Comboboxes,它们都绑定了同一个源。
<ComboBox ItemsSource="{Binding Source={StaticResource UsersViewSource}}"
当我在第一个中改变某些东西时,它也会反映到第二个。我不知道如何使用相同的ItemsSource分别保留他们的SelectedItem值。
答案 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}
这样,当每个人的项目被设置时,它会被存储到不同的地方。