如何在 MVVM AvalonDock 程序中使用 ApplicationCommands?

我正在开发一个使用 AvalonDock 同时打开多个文档的程序。还有一个公共功能区,顶部有一些常用按钮,如下所示:

如何在 MVVM AvalonDock 程序中使用 ApplicationCommands?

现在,可以通过单击 ContextMenu 中的 MenuItems 来使用 Cut,Copy,Paste,Delete

但是,当我想将这些命令绑定到功能区中的按钮时会出现一些问题。

模仿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 ???}"/>
iCMS 回答:如何在 MVVM AvalonDock 程序中使用 ApplicationCommands?

暂时,我使用 MenuItem 来替换按钮。我在 ShapeDocument UserControl 的 Control 中设置了 ApplicationCommands,并将它们绑定到 MenuItems 而不设置命令目标。

我猜WPF可以自动搜索菜单项的目标,但不能自动搜索按钮。所以我可以将它们更改为 MenuItems,并将 MenuItems 的样式更改为模仿按钮。

它不是很优雅但很方便,代码非常简单。

本文链接:https://www.f2er.com/412627.html

大家都在问