MVVM中的子菜单选择

时间:2013-10-14 16:07:35

标签: c# wpf mvvm menu-items

我有以下XAML用于使用RecentDocuments填充子MenuItem列表:

<MenuItem Header="_Recent Studies" 
          ItemsSource="{Binding RecentFiles}"
          AlternationCount="{Binding Path=Items.Count, 
                                     Mode=OneWay, 
                                     RelativeSource={RelativeSource Self}}" 
          ItemContainerStyle="{StaticResource RecentMenuItem}"/>

在ViewModel中,我有以下RecentFiles属性

private ObservableCollection<RecentFile> recentFiles = new ObservableCollection<RecentFile>();
public ObservableCollection<RecentFile> RecentFiles
{
    get { return this.recentFiles; }
    set
    {
        if (this.recentFiles == value)
            return;
        this.recentFiles = value;
        OnPropertyChanged("RecentFiles");
    }
}       

现在这样可以正常工作并显示我最近的菜单项:

MenuItems

我的问题是; 如何绑定我最近的文件MenuItem上的点击事件?我可以使用AttachedCommands,但我不知道如何实现这一点。

谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

如果您使用的是MVVM模式,则根本不需要Click事件。

您应该使用MenuItem.Command属性与ViewModel进行通信。

如何吗

正如我所看到的,您正在使用ItemContainerStyle。您可以将以下行添加到该样式:

<Style x:Key="RecentMenuItem" TargetType="MenuItem">
    ...
    <Setter Property="Command" Value="{Binding Path=SelectCommand}" />
    ...
</Style>

在您的RecentFile

 public ICommand SelectCommand { get; private set; }

您可以在RecentFile类的构造函数内初始化命令。