许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  DevExpress MVVM中Fluent API支持(第9讲)

DevExpress MVVM中Fluent API支持(第9讲)

阅读数 1
点赞 0
article_banner

Fluent API利用方法级联来连接后续调用的指令上下文。通过这样做,Fluent API遵循与人们使用的自然语言规则相同的自然语言规则。因此,构造良好的Fluent API提供了更人性化的代码,更容易理解和理解。

提示: 要想着手了解Fluent API概念,请参阅以下文章。看一看Fluent api 由Sacha Barber写的一篇代码项目博客文章,描述了什么是Fluent API以及为什么你应该使用它。第一行Fluent API代码 MSDN文档里的一章,它描述了Entity Framework范围内的Fluent API。

DevExpress MVVM框架提供了扩展方法来为任何任务构建连贯的API 表达式  :从绑定简单的属性到将MVVM行为与特定事件关联。

属性绑定和UI 触发器  

  • 一个简单的属性绑定
mvvmContext.ViewModelType = typeof(ViewModel);var fluentAPI = mvvmContext.OfType<ViewModel>();fluentAPI.SetBinding(editor, e => e.EditValue, x => x.Title);//ViewModel.cspublic virtual string Title { get; set; }
  • 绑定到内部属性
mvvmContext.ViewModelType = typeof(ViewModel);var fluent = mvvmContext.OfType<ViewModel>();fluent.SetBinding(editor, e => e.EditValue, x => x.Child.Title);//ViewModel.cspublic NestedViewModel Child { get; private set; }//NestedViewModel.cspublic virtual string Title { get; set; }
  • UI触发器
mvvmContext.ViewModelType = typeof(UIViewModel);var fluentAPI = mvvmContext.OfType<UIViewModel>();fluentAPI.SetTrigger(x => x.IsActive, (active) =>{    label.Text = active ? "Active" : "Inactive";});//UIViewModel.cspublic virtual bool IsActive { get; set; }

命令绑定

  • 带有CanExecute条件的参数化命令
mvvmContext.ViewModelType = typeof(ViewModel);int parameter = 4;var fluentAPI = mvvmContext.OfType<ViewModel>();fluentAPI.BindCommand(commandButton, (x, p) => x.DoSomething(p), x => parameter); //ViewModelpublic class ViewModel {    public void DoSomething(int p) {        //. . .    }     public bool CanDoSomething(int p) {        return (2 + 2) == p;    }}
  • 异步命令
mvvmContext.ViewModelType = typeof(ViewModel);var fluentAPI = mvvmContext.OfType<ViewModel>();fluentAPI.BindCommand(commandButton, x => x.DoSomethingAsynchronously());fluentAPI.BindCancelCommand(cancelButton, x => x.DoSomethingAsynchronously()); //ViewModelpublic class ViewModelWithAsyncCommandAndCancellation     public Task DoSomethingAsynchronously() {        return Task.Factory.StartNew(() =>        {            var asyncCommand = this.GetAsyncCommand(x => x.DoSomethingAsynchronously());            for(int i = 0; i <= 100; i++) {                if(asyncCommand.IsCancellationRequested) // cancellation check                    break;                //. . .            }        });    }}
  • WithCommand扩展允许您将命令绑定到一个或多个目标UI元素
//绑定到一个UI元素fluent.WithCommand(x => x.DoSomething())       .Bind(btnDoSomething);//绑定到多个UI元素fluent.WithCommand(x => x.DoSomething())       .Bind(btn1DoSomething)       .Bind(btn2DoSomething);fluent.WithCommand(x => x.DoSomethingAsynchronously())       .Bind(btnDo)       .BindCancel(btnCancel);
  • 命令触发器允许您在执行目标命令之前、之后或当该命令的CanExecute条件更改时自动调用特定的方法
fluent.WithCommand(x => x.DoSomething())       .After(() => AfterDoSomethingExecuted());fluent.WithCommand(x => x.DoSomething())       .Before(() => BeforeDoSomethingExecuted());fluent.WithCommand(x => x.DoSomething())       .OnCanExecuteChanged(() => WhenCanDoSomethingChanged());

绑上行为

  • 确认行为
mvvmContext.WithEvent<ChangingEventArgs>(editor, "EditValueChanging")    .Confirmation(behavior =>    {        behavior.Caption = "CheckEdit State changing";        behavior.Text = "This checkEdit's checked-state is about to be changed. Are you sure?";    });
  • Event-To-Command行为
mvvmContext.ViewModelType = typeof(ViewModel);mvvmContext.WithEvent<ViewModel, EventArgs>(thirdPartyButton, "Click")    .EventToCommand(x => x.DoSomething()); //ViewModelpublic void DoSomething() {    //. . .}
  • Key-To-Command和Keys-To-Command行为
mvvmContext.OfType<KeyAwareViewModel>()        .WithKey(memo, Keys.A)        .KeyToCommand(x => x.OnAKey());mvvmContext.OfType<KeyAwareViewModel>()        .WithKeys(memo, new Keys[] { Keys.A, Keys.B, Keys.C })        .KeysToCommand(x => x.OnKey(Keys.None), args => args.KeyCode);

【DevExpress MVVM】中文翻译系列.文章目录

DevExpress.WindowsForms.v20.1.chm离线英文原版文档下载


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空