我正在製作一個MVVM WPF程序,並且想要將一個子網格綁定到父集合中的單個項目,我正在使用telerik(RadGridView)。如何綁定到父集合中的特定項目MVVM WPF
的情況如下:
public class ItemDetails
{
Item item {get; set;}
string version {get; set;}
}
public class Item
{
ObservableCollection<ItemVersion> itemVersions { get; set;}
}
public class ItemVersion
{
string version {get; set;}
ObservableCollection<ItemVersionSubItemVersion> subItemVersions {get; set;}
}
public class ItemVersionSubItemVersion
{
ItemVersion parentItemVersion {get; set;}
ItemVersion subItemVersion {get; set;}
}
我綁定一個ObservableCollection < ItemDetails>我RadGridView並取決於ItemDetails被請求的是什麼版本,我想顯示ItemVersion的與正確的所有SubItemVersion成員版本(版本將始終是唯一的,如果沒有可用的版本,則將使用空的ObservableCollection <子項目創建新的ItemVersion)。
我得到這個半工作的唯一方法是首先顯示Item中的所有ItemVersions,然後進入SubItems,但是這顯示了不相關的ItemVersions,而不僅僅是我需要的。所以我想跳過鏈中的鏈接,可以這麼說,直接進入SubItemVersions。
我想知道如果有人知道如何能夠從xaml中的集合中選擇某個項目,有點像linq查詢,但是以xaml或其他方式直接轉到右邊ItemVersion的SubItemVersions 。
一些要求和想法,我有這樣做我很難拿出一個解決方案自己:
整個事情需要保持在一個視圖中,所以用戶可以保持一個很好的概述的結構(一個SubItemVersion可以有自己的SubItemVersions,它可以很快地變得混亂)。
它需要是MVVM,所以最好避免視圖後面的代碼,純xaml是首選。我希望模型不需要改變,但如果沒有其他解決方案可用,我將別無選擇,只能這樣做。
我想改變如下:
public class ItemDetails { Item item {get; set;} string version {get; set;} }
到:
public class ItemDetails { Item item {get; set;} ItemVersion version {get; set;} }
但是,這將增加一個ItemVersion已在該ItemVersions集合中的項目,所以我產生更多的(重複)數據超過必要,正確嗎?或者這實際上是一個合適的解決方案?
任何想法或輸入是受歡迎的,非常感謝,如果您需要更多的信息,請讓我知道,所以我可以嘗試並提供它。
編輯: 我解決我的問題,通過創建包含
ItemVersion version
ItemDetails details
一個新的視圖模型而創建這個新類的集合綁定到細節,其中一個版本返回正確的版本,從細節考慮。這看起來是最好的解決方案,而且很容易實現。
你能分享一些xaml嗎?同時在你的ViewModel中引入一個你想要顯示的變量可能會有所幫助 – lokusking
感謝@lokusking的幫助,我終於明白了 – Lachebekje