gpt4 book ai didi

c# - 如何绑定(bind)到父集合 MVVM WPF 中的特定项目

转载 作者:行者123 更新时间:2023-12-03 10:43:41 24 4
gpt4 key购买 nike

我正在制作一个 MVVM WPF 程序,并希望将 childgrid 绑定(bind)到父集合中的单个项目,我正在使用 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 绑定(bind)到我的 RadGridView 并根据 ItemDetails 中请求的版本,我想显示具有正确版本的 ItemVersion 的所有 SubItemVersion 成员(版本将始终是唯一的,如果没有可用的新 ItemVersion 将使用空的 ObservableCollection 创建)。

我得到这个半工作的唯一方法是首先显示 Item 中的所有 ItemVersions,然后转到 SubItems,但这也显示了不相关的 ItemVersions,而不仅仅是我需要的那个。所以我想跳过链中的一个链接,可以这么说,直接进入 SubItemVersions。

我想知道是否有人知道如何从 xaml 中的集合中选择某个项目,有点像 linq 查询,但在 xaml 中,或者其他方式直接转到正确 ItemVersion 的 SubItemVersions。

我的一些要求和想法让我很难自己想出一个解决方案:
  • 整个事情需要保持在一个 View 中,因此用户可以很好地了解结构(SubItemVersion 可以有自己的 SubItemVersions,这会很快变得困惑)。
  • 它需要是 MVVM,因此最好避免 View 背后的代码,强烈首选纯 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

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

    最佳答案

    我通过创建一个新的 ViewModel 解决了我的问题,其中包含

    ItemVersion version
    ItemDetails details

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

    关于c# - 如何绑定(bind)到父集合 MVVM WPF 中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039361/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com