动态绑定菜单项

本文关键字:菜单项 动态绑定 | 更新日期: 2023-09-27 18:10:18

我正在尝试动态绑定MenuItem

我有public List<string> LastOpenedFiles { get; set; }是我的数据源。我尝试运行的命令是public void DoLogFileWork(string e)

<MenuItem Header="_Recent..."
          ItemsSource="{Binding LastOpenedFiles}">
  <MenuItem.ItemContainerStyle>
    <Style TargetType="MenuItem">
      <Setter Property="Header"
              Value="What should be here"></Setter>
      <Setter Property="Command"
              Value="What should be here" />
      <Setter Property="CommandParameter"
              Value="What should be here" />
    </Style>
  </MenuItem.ItemContainerStyle>
</MenuItem>

我想在LastOpenedFiles的每个条目上单击它以进入DoLogFileWork函数,并单击该条目值。

谢谢你的帮助。

动态绑定菜单项

<Setter Property="Header" Value="What should be here"></Setter>

没有,你已经在上面设置了_Recent...

<Setter Property="Command" Value="What should be here"/>
<Setter Property="CommandParameter" Value="What should be here"/>

您是否使用MVVM方法?如果是这样,您将需要一个暴露在窗口/控件绑定的ViewModel上的ICommand,看看本文中提到的RelayCommand(或者我相信是VS2012中的本机)。

这是你在虚拟机中设置的东西:

    private RelayCommand _DoLogFileWorkCommand;
    public RelayCommand DoLogFileWorkCommand {
        get {
            if (null == _DoLogFileWorkCommand) {
                _DoLogFileWorkCommand = new RelayCommand(
                    (param) => true,
                    (param) => { MessageBox.Show(param.ToString()); }
                );
            }
            return _DoLogFileWorkCommand;
        }
    }
然后在Xaml:
<Setter Property="Command" Value="{Binding ElementName=wnLastOpenedFiles, Path=DataContext.DoLogFileWorkCommand}" />
<Setter Property="CommandParameter" Value="{Binding}"/>

在这里,您将MenuItemCommand绑定到上面声明的DoLogFileWorkCommand,并且CommandParameter被绑定到菜单项绑定的列表中的字符串。