2010-03-16 43 views
8

Tôi có hai Combobox và cả hai đều có liên kết với cùng một nguồn.WPF Combobox binding

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

Và khi tôi thay đổi thứ gì đó trong hình đầu tiên, nó cũng phản ánh thứ hai. Và tôi không biết cách giữ riêng các giá trị SelectedItem của chúng, sử dụng cùng một ItemsSource.

Trả lời

10

Thuộc tính IsSynchronizedWithCurrentItem nên được đặt thành False:

true nếu SelectedItem luôn là đồng bộ với hiện tại mục trong ItemCollection; false nếu SelectedItem không bao giờ được đồng bộ hóa với mục hiện tại; null nếu SelectedItem được đồng bộ hóa với mục hiện tại nếu Bộ chọn sử dụng một CollectionView. Giá trị mặc định là null.

Dưới đây là một ví dụ:

<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

Điều trớ trêu của bạn là - như báo giá của bạn giải thích - 'IsSynchronizedWithCurrentItem =" False "' trong mã được trích dẫn của bạn là hoàn toàn không cần thiết, bởi vì bạn không ràng buộc với 'CollectionView'. Nếu bạn lấy các thuộc tính đó ra, các combobox vẫn không được liên kết. –

+0

Đồng ý rằng nó có thể không phải là ví dụ tốt nhất, nhưng đặt giá trị thành True và chúng đồng bộ hóa như thể chúng đã bị ràng buộc với một CollectionView (giả định của tôi). Nếu thực sự điều này không làm việc với một CollectionView, thì tất cả có nghĩa là tôi sẽ xóa câu trả lời và bỏ đi việc học một cái gì đó bản thân mình. –

+0

Thu hút một dự án nhanh chóng và thử nghiệm xem liệu thuộc tính IsSynchronizedWithCurrentItem có hoạt động với một CollectionView và nó thực sự hoạt động hay không. Phải thừa nhận rằng câu trả lời của tôi không chính xác, nhưng nó cung cấp một ví dụ Kaxaml nhanh;) –

0

Bạn có thể ràng buộc riêng thuộc tính SelectedItem cho mỗi hộp tổ hợp một cách riêng biệt.

ví dụ:

SelectedItem={Binding SelectedItem1} 

Bằng cách này khi mục của mỗi người được thiết lập, nó được lưu trữ vào một nơi khác.

1

tôi đoán (từ tên của bạn bắt buộc) rằng lý do này đang xảy ra là bạn đang liên kết với một CollectionViewSource (bọc lấy một bộ sưu tập). Lớp này là một proxy mà WPF sử dụng bao gồm (trong số những thứ khác) mục được chọn của một bộ sưu tập. Rõ ràng nếu bạn đang chia sẻ bộ sưu tập này giữa hai combobox, bạn cũng đang chia sẻ mục đã chọn.

Nếu bạn đặt ItemsSource để cái gì đó là không một CollectionViewSource, điều khiển sẽ tự động quấn nó trong một. Vì vậy, đề xuất của tôi sẽ liên kết trực tiếp với bộ sưu tập thay vì gói trong một CollectionViewSource - hoặc, cách khác, tạo hai trường hợp CollectionViewSource, một cho mỗi ComboBox.