我有一个使用 Caliburn.Micro 的 .NET 4.0 应用程序。我想创建一个动态菜单,这样我就不需要为每个菜单项编写 XAML 代码。此外,我想将每个命令与一个按键手势相关联。
我有一个接口 IAction:
public interface IAction
{
string Name { get; }
InputGesture Gesture { get; }
ICommand Command { get; }
}
在我的 ViewModel 中,我公开了一个 IActions 列表:
private List<IAction> _actions;
public List<IAction> Actions
{
get { return _actions; }
set
{
_actions = value;
NotifyOfPropertyChange(()=> Actions);
}
}
我将我的工具栏绑定到如下操作:
<ToolBar>
<Menu ItemsSource="{Binding Actions}">
<Menu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="Command" Value="{Binding Command}" />
</Style>
</Menu.ItemContainerStyle>
</Menu>
</ToolBar>
以上所有工作。
我缺少的是按键手势的数据绑定。
在我阅读的所有地方,我只找到带有 Window.InputBindings 静态定义的示例,例如:
<Window.InputBindings>
<KeyBinding Key="B" Modifiers="Control" Command="ApplicationCommands.Open" />
</Window.InputBindings>
如果我可以简单地将 Window.InputBindings 封装在 ItemsControl 中,那就太好了,但这不起作用。
你们中的任何人都知道如何动态绑定 Window.InputBindings 吗?
谢谢!