【问题标题】:Binding ContextMenu on flattened ViewModel在展平的 ViewModel 上绑定 ContextMenu
【发布时间】:2010-09-02 13:39:23
【问题描述】:

假设以下类:

public class Model
{
    public ObservableCollection<A> Items { get; set; }
}

public class A
{
    ObservableCollection<B> Data { get; set; }

    //... some more properties
}

public class B
{
    //..properties
}

模型绑定到 RibbonMenu,也应该在上下文菜单中使用。上下文菜单必须绑定到模型中 B 类的所有项目。模型中的更改(添加的新项目、删除的项目、更改的项目......)应该同时更改上下文菜单和 RibbonMenu。

RibbonMenu 很好用,但如何在不创建单独模型的情况下绑定上下文菜单?

【问题讨论】:

  • 你不能只将你的 ContextMenu 绑定到你的 RibbonMenu 项目吗?
  • 上下文菜单位于不同的用户控件中,我不知道它应该如何说话或查看 RibbonMenu。

标签: wpf mvvm binding observablecollection


【解决方案1】:

您可以创建包装器属性,根据需要为视图控件展平您的 A 和 B 实体,并从模型公开它们。

因此,例如,在 Model 中,您有一个私人支持者 ObservableCollection&lt;A&gt;。然后你就有了一个公共的ObservableCollection&lt;A&gt;,它只返回私有的支持者来绑定功能区。

然后还有一个公共的ObservableCollection&lt;B&gt;,它会在它的getter 中做任何它需要做的事情,以返回你想要的上下文菜单。例如,如果您想要所有 As 中的不同 B,请让 getter 对所有 A 的 B 进行查询以返回正确的列表。

最后,要告诉视图模型中发生了更改,请实现 INotifyPropertyChanged 并在公共成员的设置器中引发 PropertyChanged 事件。

【讨论】:

  • 这就是我尝试过的,但是当我向 A 类中的集合添加新项目时,上下文菜单不会更新 - 这似乎是逻辑,因为模型类中的 ObservableCollection 应该如何知道这种变化?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2011-06-22
  • 1970-01-01
  • 2011-05-11
  • 2013-01-04
  • 2011-01-19
  • 2013-07-09
相关资源
最近更新 更多