【发布时间】:2014-01-15 07:02:06
【问题描述】:
<Custom:DataGrid.ContextMenu>
<ContextMenu ItemsSource="{Binding MenuItemsList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
</Custom:DataGrid.ContextMenu>
public ObservableCollection<MenuItem> MenuItemsList
{
get
{
ObservableCollection<MenuItemClass> list = new ObservableCollection<MenuItemClass>();
if (SelectedInspection != null)
{
switch (SelectedInspection.state.s_serverid)
{
case 1:
case 2:
list.Add(medit);
break;
case 3:
list.Add(msync);
list.Add(mview);
list.Add(mnewdoc);
break;
case 4:
list.Add(mview);
list.Add(mdelete);
break;
}
}
return list;
}
set
{
OnPropertyChanged("MenuItemsList");
}
}
ContextMenu (CM) 在 UserControl 1 (UC1) 中。 窗口有 2 个用户控件和用于选择此控件的主菜单。
选择 UC1
使用 CM - 好的
选择 UC2
选择 UC1
使用 CM - 好的
但是
选择 UC1
使用 CM - 好的
选择 UC1
使用 CM - 不更新 CM 项目
我想我应该在创建 UC1 的新视图模型时更新 UC1 的视图,但是如何? 还是我应该重写 ContextMenu 实现?
【问题讨论】:
-
只是一个小信息:您不应该使用 UIElement 的类型创建 ObservableCollections。您应该在这里使用一个包含您的业务逻辑的对象。
-
@Tomtom 你的意思是“自己的课程”吗?
-
是的,我就是这个意思
-
@Tomtom 我改了,还是不行=(
-
这些课程与您的问题没有任何关系。这只是使用 MVVM 的信息。我不明白您的问题:如果您选择 UC1,那么上下文菜单项就可以了。然后您再次选择 UC1 并且您的上下文菜单项集合不会更新。这是正确的,因为集合不会改变。您仍然拥有相同的 UserControl