我正在尝试动态绑定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
函数。
感谢您的帮助。
答案 0 :(得分:1)
<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方法吗?如果是这样,您需要在Window / Control绑定的ViewModel上公开ICommand
,请查看this article中提到的RelayCommand
(或者在VS2012中是本地的)相信)。
这是你在VM中设置的那种东西:
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}"/>
所以在这里,您将Command
的{{1}}绑定为上面声明的MenuItem
,DoLogFileWorkCommand
绑定到List中的字符串MenuItem绑定到。