• 界面控件DevExpress WinForm MVVM命令讲解(三)


    获取工具下载 - DevExpress WinForm v21.2

    命令触发器

    Triggers允许您执行与命令关联的其他查看操作,根据触发Triggers的条件,共有三种触发器类型。

    • “Before”触发器 - 允许您在目标命令执行之前执行操作。

    C#

    mvvmContext.ViewModelType = typeof(ViewModelWithSimpleCommand);
    var fluent = mvvmContext.OfType<ViewModelWithSimpleCommand>();
    fluent.BindCommand(commandButton, x => x.DoSomething);
    fluent.WithCommand(x => x.DoSomething)
    .Before(() => XtraMessageBox.Show("The target command is about to be executed"));

    VB.NET

    mvvmContext.ViewModelType = GetType(ViewModelWithSimpleCommand)
    Dim fluent = mvvmContext.OfType(Of ViewModelWithSimpleCommand)()
    fluent.BindCommand(commandButton, Function(x) x.DoSomething)
    fluent.WithCommand(Sub(x) x.DoSomething)
    .Before(Function() XtraMessageBox.Show("The target command is about to be executed"))
    • “After”触发器 - 允许您在目标命令完成后执行操作。

    C#

    mvvmContext.ViewModelType = typeof(ViewModelWithSimpleCommand);
    var fluent = mvvmContext.OfType<ViewModelWithSimpleCommand>();
    fluent.BindCommand(commandButton, x => x.DoSomething);
    fluent.WithCommand(x => x.DoSomething)
    .After(() => XtraMessageBox.Show("The target command has been executed"));

    VB.NET

    mvvmContext.ViewModelType = GetType(ViewModelWithSimpleCommand)
    Dim fluent = mvvmContext.OfType(Of ViewModelWithSimpleCommand)()
    fluent.BindCommand(commandButton, Function(x) x.DoSomething)
    fluent.WithCommand(Function(x) x.DoSomething).After(Function() XtraMessageBox.Show("The target command has been executed"))
    • “CanExecute”条件触发器 - 允许您在目标命令的 CanExecute 条件更改时执行操作。

    C#

    var fluent = mvvmContext.OfType<ViewModelWithSimpleCommandAndCanExecute>();
    fluent.BindCommand(commandButton, x => x.DoSomething);
    // When the CanExecute condition changes, the message shows up
    fluent.WithCommand(x => x.DoSomething)
    .OnCanExecuteChanged(() => XtraMessageBox.Show("The CanExecute condition has changed"));

    VB.NET

    Dim fluent = mvvmContext.OfType(Of ViewModelWithSimpleCommandAndCanExecute)()
    fluent.BindCommand(commandButton, Function(x) x.DoSomething)
    ' When the CanExecute condition changes, the message shows up
    fluent.WithCommand(Function(x) x.DoSomething)
    .OnCanExecuteChanged(Function() XtraMessageBox.Show("The CanExecute condition has changed"))

    请注意,触发器为绑定到目标命令的每个 UI 元素执行。 单击任何按钮时,下面的代码示例会显示一个消息框。

    C#

    mvvmContext1.OfType<BulkEditViewModel>()
    .WithCommand(vm => vm.RemoveFields())
    .Bind(button1)
    .Bind(button2)
    .After(() => MessageBox.Show("Test"));

    VB.NET

    mvvmContext1.OfType(Of BulkEditViewModel)()
    .WithCommand(Function(vm) vm.RemoveFields())
    .Bind(button1)
    .Bind(button2)
    .After(Function() MessageBox.Show("Test"))
    非 POCO 命令

    上面描述的 POCO 类命令允许您使用最直接和无故障的语法,DevExpress MVVM 框架还支持其他命令类型 - 以确保旧项目的轻松迁移。

    DevExpress 委托命令对象

    委托命令是 System.Windows.Input.ICommand 接口的实现。

    运行demo: Simple Commands

    C#

    DelegateCommand command = new DelegateCommand(() => {
    XtraMessageBox.Show("Hello!");
    });
    commandButton.BindCommand(command);

    VB.NET

    Dim command As New DelegateCommand(Sub() XtraMessageBox.Show("Hello!"))
    commandButton.BindCommand(command)

    运行demo:Commands with CanExecute Conditions

    C#

    Func<bool> canExecute = () => (2 + 2 == 4);
    DelegateCommand command = new DelegateCommand(() => {
    XtraMessageBox.Show("Hello!");
    }, canExecute);
    commandButton.BindCommand(command);

    VB.NET

    Dim canExecute As Func(Of Boolean) = Function() (2 + 2 = 4)
    Dim command As New DelegateCommand(Sub() XtraMessageBox.Show("Hello!"), canExecute)
    commandButton.BindCommand(command)

    运行demo:Commands with Parameters

    C#

    DelegateCommand<object> command = new DelegateCommand<object>((v) => {
    XtraMessageBox.Show(string.Format("The parameter is {0}.", v));
    });
    object parameter = 5;
    commandButton.BindCommand(command, () => parameter);

    VB.NET

    Dim command As New DelegateCommand(Of Object)(Sub(v) XtraMessageBox.Show(String.Format("The parameter is {0}.", v)))
    Dim parameter As Object = 5
    commandButton.BindCommand(command, Function() parameter)

    运行demo:Commands with Parameterized CanExecute Conditions

    C#

    Func<int, bool> canExecute = (p) => (2 + 2 == p);
    DelegateCommand<int> command = new DelegateCommand<int>((v) => {
    XtraMessageBox.Show(string.Format("The parameter is {0}.", v));
    }, canExecute);
    int parameter = 4;
    commandButton.BindCommand(command, () => parameter);

    VB.NET

    Dim canExecute As Func(Of Integer, Boolean) = Function(p) (2 + 2 = p)
    Dim command As New DelegateCommand(Of Integer)(Sub(v) XtraMessageBox.Show(String.Format("The parameter is {0}.", v)), canExecute)
    Dim parameter As Integer = 4
    commandButton.BindCommand(command, Function() parameter)

    自定义命令类

    这些是具有至少一个 Execute 方法的任何自定义类型的对象。 如果需要,您可以添加 CanExecute 方法和 CanExecuteChanged 事件。

    运行demo:Simple Commands

    C#

    CommandObject command = new CommandObject();
    commandButton.BindCommand(command);
    
    public class CommandObject {
    public void Execute(object parameter) {
    XtraMessageBox.Show("Hello!");
    }
    }

    VB.NET

    Private command As New CommandObject()
    commandButton.BindCommand(command)
    
    Public Class CommandObject
    Public Sub Execute(ByVal parameter As Object)
    XtraMessageBox.Show("Hello!")
    End Sub
    End Class

    运行demo:Commands with Parameters

    C#

    CommandObjectWithParameter command = new CommandObjectWithParameter();
    int parameter = 4;
    commandButton.BindCommand(command, () => parameter);
    
    public class CommandObjectWithParameter {
    public void Execute(object parameter) {
    XtraMessageBox.Show(string.Format(
    "The parameter is {0}.", parameter));
    }
    public bool CanExecute(object parameter) {
    return object.Equals(2 + 2, parameter);
    }
    }

    VB.NET

    Dim command As New CommandObjectWithParameter()
    Dim parameter As Integer = 4
    commandButton.BindCommand(command, Sub() parameter)
    
    Public Class CommandObjectWithParameter
    Public Sub Execute(ByVal parameter As Object)
    XtraMessageBox.Show(String.Format("The parameter is {0}.", parameter))
    End Sub
    Public Function CanExecute(ByVal parameter As Object) As Boolean
    Return Object.Equals(2 + 2, parameter)
    End Function
    End Class

    DevExpress WinForm | 下载试用

    DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!


    DevExpress技术交流群5:742234706      欢迎一起进群讨论

    更多DevExpress线上公开课、中文教程资讯请上中文网获取

  • 相关阅读:
    element ui el-date-picker 判断所选时间是否交叉
    MDN中的箭头函数!!!
    es6 解构
    element ui 实现可编辑表格
    节流 防抖。。。。深入理解
    element ui 表格对齐方式,表头对齐方式
    纯html + css 导航栏
    PHP 1
    apache 建立虚拟主机
    Can't connect to local MySQL server through socket '/tmp/mysql.sock'
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/15700876.html
Copyright © 2020-2023  润新知