提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2021-12-01 09:41:41.197|阅读 222 次
概述:DevExpress WinForm创建的应用程序可利用MVVM设计模式,本文主要介绍命令功能,欢迎下载最新版体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
获取工具下载 - DevExpress WinForm v21.2
在标准的 WinForms 应用程序中,操作通常在事件处理程序中执行。 例如,要在用户单击按钮时刷新数据,您需要处理 ButtonClick 事件并检索数据源记录。
这种标准技术不符合分离层的 MVVM 概念,从数据源中提取数据的代码应该属于 ViewModel 层,而不是 View。 在 MVVM 中,这些任务是通过命令来完成的——封装了操作的 ViewModel 对象。将一个 UI 元素绑定到该对象,以实现所需的层分离:View 代码现在只有绑定代码,而所有业务逻辑都保留在 ViewModel 中,可以安全地更改。
DevExpress MVVM 框架将所有公共无效方法视为可绑定命令,下面的代码说明了如何声明一个使用服务来显示消息框的命令。您可以通过以下链接在 DevExpress 演示中心查看完整演示:Simple Command。
C#
//POCO ViewModel public class ViewModelWithSimpleCommand { //command public void DoSomething() { var msgBoxService = this.GetService<IMessageBoxService>(); msgBoxService.ShowMessage("Hello!"); } }
VB.NET
'POCO ViewModel Public Class ViewModelWithSimpleCommand 'command Public Sub DoSomething() Dim msgBoxService = Me.GetService(Of IMessageBoxService)() msgBoxService.ShowMessage("Hello!") End Sub End Class
重要提示:名称以“Command”结尾的方法会引发异常 - 重命名此类方法或使用 Command 属性修饰它们。
要将按钮链接到此命令,请使用 BindCommand 或 WithCommand 方法。
C#
//View code mvvmContext.ViewModelType = typeof(ViewModelWithSimpleCommand); var fluent = mvvmContext.OfType<ViewModelWithSimpleCommand>(); fluent.BindCommand(commandButton, x => x.DoSomething); \\or fluent.WithCommand(x => x.DoSomething) .Bind(commandButton1);
VB.NET
'View code mvvmContext.ViewModelType = GetType(ViewModelWithSimpleCommand) Dim fluent = mvvmContext.OfType(Of ViewModelWithSimpleCommand)() fluent.BindCommand(commandButton, Sub(x) x.DoSomething) 'or fluent.WithCommand(Sub(x) x.DoSomething) .Bind(commandButton1)
WithCommand 方法允许您同时绑定多个按钮。
运行演示:Bind to Multiple UI Elements.
C#
//View var fluent = mvvmContext.OfType<ViewModelWithSimpleCommand>(); fluent.WithCommand(x => x.DoSomething) .Bind(commandButton1) .Bind(commandButton2);
VB.NET
'View Dim fluent = mvvmContext.OfType(Of ViewModelWithSimpleCommand)() fluent.WithCommand(Sub(x) x.DoSomething) .Bind(commandButton1) .Bind(commandButton2)
要指定确定命令是否应该运行的条件,请声明一个布尔方法,其名称以“Can”开头,后跟相关命令名称,这些方法称为 CanExecute 条件。
C#
//ViewModel public class ViewModelWithConditionalCommand { //Command public void DoSomething() { var msgBoxService = this.GetService<IMessageBoxService>(); msgBoxService.ShowMessage("Hello!"); } //CanExecute condition public bool CanDoSomething() { return (2 + 2) == 4; } }
VB.NET
'ViewModel Public Class ViewModelWithConditionalCommand 'Command Public Sub DoSomething() Dim msgBoxService = Me.GetService(Of IMessageBoxService)() msgBoxService.ShowMessage("Hello!") End Sub 'CanExecute condition Public Function CanDoSomething() As Boolean Return (2 + 2) = 4 End Function End Class
您还可以忽略 CanExecute 名称要求并使用 Command 属性手动分配命令条件。
C#
[Command(CanExecuteMethodName = "DoSomethingCriteria")] public void DoSomething(int p) { //command }
VB.NET
<Command(CanExecuteMethodName := "DoSomethingCriteria")> Public Sub DoSomething(ByVal p As Integer) 'command End Sub
如果 CanExecute 条件返回 false,则框架会更改链接到此命令的 UI 元素的状态(禁用、取消选中或隐藏此元素)。 上面的代码示例来自以下演示:Command with CanExecute condition,运行此演示并更改条件,使其始终返回 false。“Execute Command”按钮变为禁用,因为其相关命令无法再运行。
C#
//ViewModel public bool CanDoSomething() { //always "false" return (2 + 2) == 5; }
VB.NET
'ViewModel Public Function CanDoSomething() As Boolean 'always "False" Return (2 + 2) = 5 End Function
在以下情况下,框架会检查 CanExecute 条件:
C#
//Bindable Property public virtual MyEntity SelectedEntity{ get; set; } //OnChanged callback for the bindable property protected void OnSelectedEntityChanged(){ this.RaiseCanExecuteChanged(x=>x.DoSomething()); } //Command public void DoSomething() { //. . . } //CanExecute condition public bool CanDoSomething() { //. . . }
VB.NET
'Bindable Property Public Overridable Property SelectedEntity() As MyEntity 'OnChanged callback for the bindable property Protected Sub OnSelectedEntityChanged() Me.RaiseCanExecuteChanged(Function(x) x.DoSomething()) End Sub 'Command Public Sub DoSomething() '. . . End Sub 'CanExecute condition Public Function CanDoSomething() As Boolean '. . . End Function
DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
更多产品正版授权详情及优惠,欢迎咨询
DevExpress技术交流群5:742234706 欢迎一起进群讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:慧都网本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢