2013-07-10 21 views
0

我有一個樹狀的數據圖形,我需要顯示給用戶,讓用戶從中選擇。爲了簡單起見,假設我有一個街道列表,每個街道都包含一個房屋列表,每個房屋都包含一個在那裏居住的人的列表。事情是這樣的:WPF不同的SelectedItem在不同的上下文

interface IStreet { 
    string Name {get;} 
    IReadOnlyCollection<IHouse> Houses {get;} 
} 

interface IHouse { 
    int StreetNumber {get;} 
    IReadOnlyCollection<IPerson> People {get;} 
} 

interface IPerson { 
    string Name {get;} 
} 

我在WPF一種形式,用戶應該選擇2種不同的人,但他們兩人都住在同一條街上。事情是這樣的:

+------------------------------------------------+ 
| Street:          | 
| +------------------------------------------+ | 
| | Pick street       ▾ | | 
| +------------------------------------------+ | 
|            | 
| + - Person 1 (Group box) - - - - - - - - - + | 
| | House:         | | 
| | +------------------------------------+ | | 
| | | Pick house      ▾ | | | 
| | +------------------------------------+ | | 
| |           | | 
| | Person:         | | 
| | +------------------------------------+ | | 
| | | Pick peron      ▾ | | | 
| | +------------------------------------+ | | 
| + - - - - - - - - - - - - - - - - - - - - -+ | 
|            | 
| + - Person 2 (Group box) - - - - - - - - - + | 
| | House:         | | 
| | +------------------------------------+ | | 
| | | Pick house      ▾ | | | 
| | +------------------------------------+ | | 
| |           | | 
| | Person:         | | 
| | +------------------------------------+ | | 
| | | Pick peron      ▾ | | | 
| | +------------------------------------+ | | 
| + - - - - - - - - - - - - - - - - - - - - -+ | 
+------------------------------------------------+ 

我一開始就具有「匹克街」組合框有它的IsSynchronizedWithCurrentItem設置爲true,並結合兩組盒DataContext{Binding Path=Streets/}。我希望通過設置組合框的DataContext它將創建單獨的上下文,以便當我將House-ComboBox綁定到{Binding Path=Houses}並將其設置爲與當前項目同步時,它們將維護各自的「當前項目」,然而,這並沒有發生。所以,現在,當我爲任何一個人選房子時,另一個也會發生變化。我的問題是,有沒有什麼優雅的方式可以使這個設置與綁定一起工作,還是我不得不回到手動填充組合框OnChange的方式?

回答

1

您對Street中的人使用默認的CollectionViewSource(我一直認爲這些是遊標)。

要有兩個遊標,您需要兩個CollectionViewSources

可以在代碼或XAML中做出這些和groupboxes綁定到兩個CollectionViewSources

+0

這是比我想出了好多了。我使用IValueConverter爲每個「GroupViews」創建一個集合的副本。 – Alxandr

+0

當您想操縱列表和/或其項目時,可能仍然需要副本(儘管不是通過使用valueconverter)。但是,當試圖從併發的角度設想可能發生的情況時,這會引起嚴重的頭痛。 –

+0

由於某種原因,集合只是ReadOnly。沒有突變應該發生,所以併發應該不成問題。 – Alxandr

相關問題