gpt4 book ai didi

wpf - 带有 WPF TreeView 的 MVVM 主详细信息

转载 作者:行者123 更新时间:2023-12-03 10:14:05 26 4
gpt4 key购买 nike

我有以下情况:

意见:

  • EbayCategoriesView(带有 TreeView)
  • 维护EbayCategoryView(带有类别详细信息字段)

  • View 模型:
  • EbayAllCategoriesViewModel(带有称为 EbayCategories 的 EbayCategoryViewModel 的 ObservableCollection)。
  • EbayCategoryViewModel(带类别属性)

  • EbayCategoryViewModel 有一个公共(public)属性,即一个名为 ChildrenCategories 的列表。 TreeView 绑定(bind)到 ObservableCollection,TreeView 的每个节点都是一个 HyperLink。
    我希望当单击超链接时,系统会打开 MaintainEbayCategoryView 并使用 EbayCategoryViewModel 数据加载它。

    我正在使用 MVVM 模式; EbayCategoryViewModel 接受构造函数中的输入 ICommand 参数。当我在 EbayAllCategoriesViewModel 中填充 ObservableCollection 时,我为集合的每个元素创建一个新的 RelayCommand 并传递应该执行的函数:
    hierarchyList.Add(new EbayCategoryViewModel(
    item.EbayCategoryName,
    item.EbayCategoryID,
    FillRecursive(flatList, item.EbayCategoryID, item.EbayCategoryName),
    parentCategoryName,
    item.EbayOrder,
    new RelayCommand(cmd => this.LoadCategoryDetails())
    ));

    我现在的问题是,在 EbayAllCategoriesViewModel 的 LoadCategoryDe​​tails() 方法中,我没有任何已单击的 EbayCategoryViewModel 树节点的引用(TreeView 中的 SelectedItem 不是公共(public)的,而且我不确定它是否包含被点击的元素...)。

    即使我找到了一些解决方法,我也想了解解决我的问题的正确方法是什么,尊重 MVVM 模式。
    由于我已经拥有 EbayCategoryViewModel 中的所有类别字段,因此我将能够访问当前被单击的 EbayCategoryViewModel 对象,而无需再次访问我的数据源。

    提前感谢您的任何建议。

    最佳答案

    为什么不将 EbayCategoryViewModel 实例作为参数传递给 Command 处理程序。这样,您将拥有VM的实例。

    hierarchyList.Add(new EbayCategoryViewModel(
    item.EbayCategoryName,
    item.EbayCategoryID,
    FillRecursive(flatList, item.EbayCategoryID, item.EbayCategoryName),
    parentCategoryName,
    item.EbayOrder,
    new RelayCommand(param=> this.LoadCategoryDetails(param))
    ));

    在你绑定(bind)你的命令的地方你可以设置 CommandParameter返回 DataContext 即 EbayCategoryViewModel CommandParameter="{Binding}" 的实例

    关于wpf - 带有 WPF TreeView 的 MVVM 主详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796703/

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