在 WPF 中实现预定义的打开命令
Posted
技术标签:
【中文标题】在 WPF 中实现预定义的打开命令【英文标题】:Implement predefined Open Command in WPF 【发布时间】:2019-05-13 00:15:43 【问题描述】:如何将我自己在 MyOpenCommand.cs 中名为 MyOpenCommand 的书面 Open Command 绑定到 WPF 提供的预定义 Open Command?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace DokumentViewerSample.Commands
class MyOpenCommand : ICommand
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
return true;
public void Execute(object parameter)
//Some opening logic!
通常,我会在 Window.Resources 中创建一个引用来定义一个键, 类似:
<Window.Resources>
<local:MyOpenCommand x:Key="cmd1" />
</Window.Resources>
最后将命令绑定到控件的命令属性上。
但是我怎样才能使用预定义的打开命令呢?我知道,我可以定义 BindingResources。类似的东西:
<Window.CommandBindings>
<CommandBinding Command="Open" CanExecute="Some_Handler"
Executed="Some_Handler2"></CommandBinding>
</Window.CommandBindings>
但是在这里我会在 MainWindow.xaml.cs 文件中创建回调方法,我感觉这是不对的。
如果您能向我展示最佳实践版本,我将非常感激(:
感谢您的宝贵时间!
【问题讨论】:
您想稍后通过 Windows 中的控件使用该命令吗? 是的!我想要一个控件来使用它 打开是一个命令。 MyOpenCommand 是另一个。你想做什么?您不能用自己的命令替换 Open 命令,但您可以处理正在引发的 Open 命令。 【参考方案1】:如果我想使用来自控件的命令,我通常会在视图模型中定义它。
public class ViewModel
public MyOpenCommand MyCommand get; set; = new MyOpenCommand();
//...
然后设置视图模型
public MainWindow()
InitializeComponent();
DataContext = new ViewModel();
比我能够设置命令绑定像:
<Grid>
<Button Content="Open" Command="Binding MyCommand"></Button>
</Grid>
顺便说一下,MyOpenCommand 类必须设置为 public。
如果你想使用 CommandBindings,可以看看 Matt Hamilton 的文章: matthamilton.net/commandbindings-with-mvvm
【讨论】:
是的,我知道,但这并不是我想知道的。我想知道如何使用预定义的 ApplicationComands.Open 并将 MyOpenCommand 类中的方法(CanExecute 和 Execute)绑定到 EventHandler?因为我不想将方法定义和逻辑存储在 mainwindow.xaml.cs (: 我认为在这种情况下,艺术 matthamilton.net/commandbindings-with-mvvm 可能会有所帮助以上是关于在 WPF 中实现预定义的打开命令的主要内容,如果未能解决你的问题,请参考以下文章
在python的自定义类中实现'with object() as f'的使用
在 iOS 中实现 - 带有自定义标记器的 Android MultiAutoCompleteTextView,如 Whatsapp [附加图片]