WPF在菜单显示之前更新上下文菜单项

本文关键字:更新 上下文 菜单项 菜单 显示 WPF | 更新日期: 2023-09-27 18:04:46

我正在使用WPF与Caliburn和MVVM模式,我试图建立一个动态上下文菜单。

目前我们有一个上下文菜单,它的Items绑定到ViewModel上的BindableCollection。

<UserControl.ContextMenu>
         <ContextMenu ItemsSource="{Binding AvailableActions}"
                      actions:Action.TargetWithoutContext="{Binding}"
                      ItemContainerStyleSelector="{StaticResource NamedActionStyleSelector}"/>
</UserControl.ContextMenu>
public BindableCollection<NamedAction> AvailableActions { get; set; }

这个BindableCollection在程序运行期间的某些情况下由方法(同样在视图模型上)更新:

private void UpdateAvailableActions()

当前的系统在大多数情况下工作得很好,但有一些边缘情况表明,我们将更好地在右键单击事件后动态生成列表。

所以我的问题是,谁能帮我用最好的方式来调用更新方法(或编写一个替代方法将被调用),当用户右键单击。如果能提供任何帮助,我将不胜感激。

谢谢

WPF在菜单显示之前更新上下文菜单项

就我个人而言,我非常喜欢从IPropertyNotifyChanged中使用OnPropertyChanged()。通过这种方式,您可以创建一个命令,通过右键单击调用OnPropertyChanged()来执行。由于您使用的是MVVM,因此您必须自己做一些关于如何将事件作为命令实现的研究,可以在这里或这里找到一个起点。或者,您可以创造性地使用CommandParameter绑定,并在命令中使用它。

希望有帮助!