【问题标题】:How to bind to a specific item inside a parent Collection MVVM WPF如何绑定到父集合 MVVM WPF 中的特定项目
【发布时间】: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 绑定到我的 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 已经在 Item 的 ItemVersions 集合中,所以我生成的(重复)数据比必要的多,对吗?或者这实际上是一个适当的解决方案?

欢迎并非常感谢任何想法或意见,如果您需要更多信息,请告诉我,以便我尝试提供。

编辑: 我通过创建一个包含

的新 ViewModel 解决了我的问题
ItemVersion version
ItemDetails details

并创建了这个新类的集合以绑定到详细信息,其中版本返回正确的版本,取自详细信息。这似乎是最好的解决方案,而且很容易实现。

【问题讨论】:

  • 你能分享一些xaml吗?在您想要显示的 ViewModel 中引入一个变量可能会有所帮助
  • 感谢@lokusking 的帮助,我终于想通了

标签: c# wpf linq xaml mvvm


【解决方案1】:

我通过创建一个包含

的新 ViewModel 解决了我的问题
ItemVersion version
ItemDetails details

并创建了这个新类的集合以绑定到详细信息和版本,其中版本返回从详细信息中获取的正确版本。这似乎是最好的解决方案,而且很容易实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2018-03-18
    • 2010-11-18
    相关资源
    最近更新 更多