我有一個樹狀的數據圖形,我需要顯示給用戶,讓用戶從中選擇。爲了簡單起見,假設我有一個街道列表,每個街道都包含一個房屋列表,每個房屋都包含一個在那裏居住的人的列表。事情是這樣的: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
的方式?
這是比我想出了好多了。我使用IValueConverter爲每個「GroupViews」創建一個集合的副本。 – Alxandr
當您想操縱列表和/或其項目時,可能仍然需要副本(儘管不是通過使用valueconverter)。但是,當試圖從併發的角度設想可能發生的情況時,這會引起嚴重的頭痛。 –
由於某種原因,集合只是ReadOnly。沒有突變應該發生,所以併發應該不成問題。 – Alxandr