2016-08-19 129 views
1

我正在製作一個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 

一個新的視圖模型而創建這個新類的集合綁定到細節,其中一個版本返回正確的版本,從細節考慮。這看起來是最好的解決方案,而且很容易實現。

+0

你能分享一些xaml嗎?同時在你的ViewModel中引入一個你想要顯示的變量可能會有所幫助 – lokusking

+0

感謝@lokusking的幫助,我終於明白了 – Lachebekje

回答

0

我解決我的問題通過創建包含

ItemVersion version 
ItemDetails details 

一個新的視圖模型而創建這個新類的集合綁定到的細節和版本,其中一個版本返回從細節採取了正確的版本。這看起來是最好的解決方案,而且很容易實現。