如何绑定到父集合中的特定项目MVVM WPF

问题描述:

我正在制作一个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

我解决我的问题通过创建包含

ItemVersion version 
ItemDetails details 

一个新的视图模型而创建这个新类的集合绑定到的细节和版本,其中一个版本返回从细节采取了正确的版本。这看起来是最好的解决方案,而且很容易实现。