【发布时间】:2016-08-19 12:43:32
【问题描述】:
我正在制作一个 MVVM WPF 程序并希望将子网格绑定到父集合中的单个项目,我正在使用 Telerik (RadGridView)。
情况如下:
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
我得到这个半工作的唯一方法是首先显示 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 已经在 Item 的 ItemVersions 集合中,所以我生成的(重复)数据比必要的多,对吗?或者这实际上是一个适当的解决方案?
欢迎并非常感谢任何想法或意见,如果您需要更多信息,请告诉我,以便我尝试提供。
编辑: 我通过创建一个包含
的新 ViewModel 解决了我的问题ItemVersion version
ItemDetails details
并创建了这个新类的集合以绑定到详细信息,其中版本返回正确的版本,取自详细信息。这似乎是最好的解决方案,而且很容易实现。
【问题讨论】:
-
你能分享一些xaml吗?在您想要显示的 ViewModel 中引入一个变量可能会有所帮助
-
感谢@lokusking 的帮助,我终于想通了