首页 / C# / c# – wpf中的自定义命令
c# – wpf中的自定义命令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – wpf中的自定义命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2263字,纯文字阅读大概需要4分钟。
内容图文
![c# – wpf中的自定义命令](/upload/InfoBanner/zyjiaocheng/798/04063954f98744ddabd06c45ea968200.jpg)
我正在开发一个WPF应用程序,它有一个工具栏/菜单,可用于多个自定义命令.可能在15-20左右.我已经看到了如何创建自定义命令的文档,但它们都不一定适用于我想要做的事情.
我正在使用一个控制器来处理我的应用程序中的业务逻辑,我试图让我的观点完全不做任何逻辑.
我想要做的是在我的项目中创建一个目录,该目录包含自定义命令类,以便我可以将它们与控制器和视图分离,但我仍然希望从视图中调用它们,例如正常的命令是.
我也看到过使用DelegateCommand类,但我不太确定这是否是我想要的方向.
我希望能够有一个任意的自定义命令类,如下所示
public CustomCommand: ICommandd
{
public bool CanExecute(object parameter)
{
//arbitrary logic
}
public void Execute(object parameter)
{
}
}
我的想法是,我会有10-20个,我希望将它们与其他所有东西分开,并在需要时调用它们.
我知道有一种方法可以分离我的自定义命令,但我不太确定.
我是新手使用命令,所以我仍然试图掌握这个概念.
谢谢,
解决方法:
概念是您将命令绑定到按钮,该命令驱动此按钮的两个属性:“单击”和“启用”,从而生成您发布的界面.
您想要执行命令的主要原因是能够将按钮单击绑定到视图模型中的操作.
如果创建一个将操作作为构造函数参数的自定义命令,则可以将视图模型中的方法直接连接到命令.
public class RelayCommand: ICommandd
{
Action action;
Func<bool> canExecute;
public RelayCommand(Action action) : this(action, () => true) {}
public RelayCommand(Action action, Func<bool> canExecute)
{
this.action = action;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return canExecute();
}
public void Execute(object parameter)
{
action();
}
}
视图模型中的用法是
public RelayCommand SaveCommand { get; set; }
SaveCommand = new RelayCommand(OnSave);
public void Save()
{
// save logic...
}
如果你想连接CanExecute,也可以使用第二个ctor并提供CanSave方法.
public RelayCommand SaveCommand { get; set; }
SaveCommand = new RelayCommand(OnSave, CanSave);
public void Save()
{
// save logic...
}
public bool CanSave()
{
return // ...
}
您可能已经注意到我在我的实现中删除了command参数.这在大多数情况下就足够了,并且可以在处理程序方法中节省额外的参数.对于剩下的10%,我实现了一个RelayCommand< T>它采用Action而不是Action并将Execute方法更改为
public void Execute(object parameter)
{
action((T)parameter);
}
这需要一个参数化的处理程序
SaveCommand = new RelayCommand<SomeType>(OnSave);
public void Save(SomeType toSave)
{
// save logic using parameter
}
这可以节省您在使用对象变量时遇到的所有投射问题,并使您的视图模型类型安全.
内容总结
以上是互联网集市为您收集整理的c# – wpf中的自定义命令全部内容,希望文章能够帮你解决c# – wpf中的自定义命令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。