2010-03-16 642 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