Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MVVM更新ContextMenu的ItemSource_C#_Wpf_Mvvm_Contextmenu_Itemsource - Fatal编程技术网

C# 如何使用MVVM更新ContextMenu的ItemSource

C# 如何使用MVVM更新ContextMenu的ItemSource,c#,wpf,mvvm,contextmenu,itemsource,C#,Wpf,Mvvm,Contextmenu,Itemsource,我有一个ContextMenu,我正试图从我的ViewModel类绑定一个列表。我使用两种不同的方法设置此列表OnZoneReceived方法在进行更改时触发,而OnItemReceived方法在所选选项卡项更改时触发。在这个项目中,我有tabItems,每个tabItem都有自己的DesignerCanvas 问题是,Zones在所选选项卡项更改时更新,但在触发onzonerseceived方法且输入“canvas”具有正确的Zones列表时,DesignerCanvas更新时不会更新 资源字

我有一个ContextMenu,我正试图从我的ViewModel类绑定一个列表。我使用两种不同的方法设置此列表<代码>OnZoneReceived方法在进行更改时触发,而
OnItemReceived
方法在所选选项卡项更改时触发。在这个项目中,我有tabItems,每个tabItem都有自己的DesignerCanvas

问题是,
Zones
在所选选项卡项更改时更新,但在触发
onzonerseceived
方法且输入“canvas”具有正确的
Zones
列表时,DesignerCanvas更新时不会更新

资源字典

视图模型
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Controls;
使用核心媒体;
使用PropulsimGUI.控件;
使用PropulsimGUI.DataModel;
使用PropulsimGUI.Utilities;
命名空间PropulsimGUI.ViewModel
{
公共类ZoneView模型:INotifyPropertyChanged
{
公共区域视图模型()
{
Messenger.Default.Register(此,已接收);
Messenger.Default.Register(此,onzonerseceived,“Zone”);
}
收到的分区上的专用空白(DesignerCanvas画布)
{
区域=画布。区域;
}
收到的公共文件(ClosableTab项)
{
分区=item.DesignerCanvas.Zones;
}
私人列表区;
公共列表区
{
获取{return\u zones;}
设置
{
_分区=值;
RaiseProperty变更(“区域”);
}
}
公共事件属性更改事件处理程序属性更改;
public void RaisePropertyChanged(字符串属性AtchChanged)
{
//检查事件是否不为null,而不是raise event和pass
//在已更改的属性名称中
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(PropertyTatchanged));
}
}
}

您没有提供足够的信息,但正如我所看到的,如果调用event
OnZonesReceived
,并且code
Zones=item.DesignerCanvas.Zones有效,那么
Zones=canvas.Zones不起作用的原因是
canvas.Zones
是同一个对象,在本例中,尽管
RaisePropertyChanged(“Zones”)绑定到
区域
将不会更新。即代码

Zones.Add(new ZoneModel());
Zones=Zones;
不会更新ItemsSource

您的解决方案可以是:

private void OnZonesReceived(DesignerCanvas canvas)
{
    Zones = new List<ZoneModel>(canvas.Zones);
}
已接收的分区上的私有无效(DesignerCanvas画布) { 区域=新列表(canvas.Zones); }
您没有提供足够的信息,但正如我所看到的,如果调用event
OnZonesReceived
,并且code
Zones=item.DesignerCanvas.Zones有效,那么
Zones=canvas.Zones不起作用的原因是
canvas.Zones
是同一个对象,在本例中,尽管
RaisePropertyChanged(“Zones”)绑定到
区域
将不会更新。即代码

Zones.Add(new ZoneModel());
Zones=Zones;
不会更新ItemsSource

您的解决方案可以是:

private void OnZonesReceived(DesignerCanvas canvas)
{
    Zones = new List<ZoneModel>(canvas.Zones);
}
已接收的分区上的私有无效(DesignerCanvas画布) { 区域=新列表(canvas.Zones); }
这里的问题是什么?因为“为什么区域=画布。区域;不起作用”不是一个问题。这里的问题是什么?因为“为什么区域=canvas.Zones;不起作用”不是一个问题。