Wpf 在展开的ViewModel上绑定上下文菜单

Wpf 在展开的ViewModel上绑定上下文菜单,wpf,mvvm,binding,observablecollection,Wpf,Mvvm,Binding,Observablecollection,假设以下类别: public class Model { public ObservableCollection<A> Items { get; set; } } public class A { ObservableCollection<B> Data { get; set; } //... some more properties } public class B { //..properties } 公共类模型 { 公共Obs

假设以下类别:

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

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

    //... some more properties
}

public class B
{
    //..properties
}
公共类模型
{
公共ObservableCollection项{get;set;}
}
公共A类
{
ObservableCollection数据{get;set;}
//…更多的财产
}
公共B级
{
//…特性
}
该模型绑定到RibbonMenu,还应在关联菜单中使用。上下文菜单必须绑定到模型中B类的所有项。模型中的更改(添加新项、删除项、更改项…)应同时更改关联菜单和RibbonMenu


RibbonMenu工作得很好,但是如何在不创建单独模型的情况下绑定contextmenu呢?

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

所以,例如,在模型中,您有一个私人支持者
observateCollection
。然后有一个public
observateCollection
,它只返回功能区绑定到的私有后台

然后还有一个public
ObservableCollection
,它在getter中执行任何需要执行的操作,以返回上下文菜单所需的内容。例如,如果您希望在所有As中使用不同的Bs,那么让getter对a的所有Bs进行查询以返回正确的列表


最后,为了告诉视图模型发生了变化,实现INotifyPropertyChanged并在公共成员的setters中引发PropertyChanged事件。

难道不能将ContextMenu绑定到RibbonMenu项吗?上下文菜单位于不同的用户控件中,我不知道它应该如何交谈或查看RibbonMenu。这是我尝试过的,但当我在中向集合添加新项时类上下文菜单不更新-这似乎是合乎逻辑的,因为模型类中的ObservableCollection如何知道这种更改?