如何在 MVVM AvalonDock 程序中使用 ApplicationCommands?
How to use ApplicationCommands in a MVVM AvalonDock Program?
我正在开发一个使用 AvalonDock 同时打开多个文档的程序。还有一个 public 功能区,顶部有一些常用按钮,如下所示:
现在,Cut, Copy, Paste, Delete
可以通过在ContextMenu中点击它们的MenuItem来使用。
但是,当我想将这些命令绑定到功能区中的按钮时,出现了一些问题。
模仿AvalonDock的例子,我的XAML是
<DockingManager DocumentsSource="{Binding Documents}" ActiveContent="{Binding ActiveDocument,Mode=TwoWay}">
<DockingManager.LayoutItemTemplateSelector>
<local:PanesTemplateSelector>
<local:PanesTemplateSelector.ShapesDocumentTemplate>
<DataTemplate>
<view:ShapesDocument/>
</DataTemplate>
</local:PanesTemplateSelector.ShapesDocumentTemplate>
</local:PanesTemplateSelector>
</DockingManager.LayoutItemTemplateSelector>
</DockingManager>
而我的 C# 是:
public ObservableCollection<ShapesDocumentViewModel> Documents { get; set; } = new ObservableCollection<ShapesDocumentViewModel>();
所以 ActiveDocument
是 ViewModel
。
在我的 ShapesDocument
中,有一个 CanvasEx
和 Cut_Executed
,Copy_Executed
...
那么,如何绑定 CommandTarget?或者有一些方法可以将 Executed
移动到 ViewModel 中?
<Button Command="{x:Static ApplicationCommands.Cut}" CommandTarget="{Binding ???}"/>
我暂时用MenuItem
s来替换按钮。我在 ShapeDocument
UserControl 中的控件中设置了 ApplicationCommands,并将它们绑定到 MenuItems 而不设置命令目标。
我猜WPF可以自动搜索菜单项的目标,但不能自动搜索按钮。所以我可以将它们更改为 MenuItems,并将 MenuItems 的样式更改为模仿按钮。
不是很优雅,但是很方便,代码也很简单。
我正在开发一个使用 AvalonDock 同时打开多个文档的程序。还有一个 public 功能区,顶部有一些常用按钮,如下所示:
现在,Cut, Copy, Paste, Delete
可以通过在ContextMenu中点击它们的MenuItem来使用。
但是,当我想将这些命令绑定到功能区中的按钮时,出现了一些问题。
模仿AvalonDock的例子,我的XAML是
<DockingManager DocumentsSource="{Binding Documents}" ActiveContent="{Binding ActiveDocument,Mode=TwoWay}">
<DockingManager.LayoutItemTemplateSelector>
<local:PanesTemplateSelector>
<local:PanesTemplateSelector.ShapesDocumentTemplate>
<DataTemplate>
<view:ShapesDocument/>
</DataTemplate>
</local:PanesTemplateSelector.ShapesDocumentTemplate>
</local:PanesTemplateSelector>
</DockingManager.LayoutItemTemplateSelector>
</DockingManager>
而我的 C# 是:
public ObservableCollection<ShapesDocumentViewModel> Documents { get; set; } = new ObservableCollection<ShapesDocumentViewModel>();
所以 ActiveDocument
是 ViewModel
。
在我的 ShapesDocument
中,有一个 CanvasEx
和 Cut_Executed
,Copy_Executed
...
那么,如何绑定 CommandTarget?或者有一些方法可以将 Executed
移动到 ViewModel 中?
<Button Command="{x:Static ApplicationCommands.Cut}" CommandTarget="{Binding ???}"/>
我暂时用MenuItem
s来替换按钮。我在 ShapeDocument
UserControl 中的控件中设置了 ApplicationCommands,并将它们绑定到 MenuItems 而不设置命令目标。
我猜WPF可以自动搜索菜单项的目标,但不能自动搜索按钮。所以我可以将它们更改为 MenuItems,并将 MenuItems 的样式更改为模仿按钮。
不是很优雅,但是很方便,代码也很简单。