界面控件DevExpress WinForm - MVVM服务讲解(一)

2022-05-16科技235

DevExpress Universal Subscription官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

考虑像显示来自 ViewModel 的通知(例如,消息框)这样的微不足道的任务,作为可视化元素,任何消息框实际上都是视图的一部分。 因此,如果你直接从 ViewModel 显示消息框(定义一个调用 MessageBox.Show 方法的命令),这个简单的代码将破坏主要的MVVM概念 - ViewModels不能引用Views,并使其无法编写ViewModel的单元测试。为了解决这个困难,DevExpress MVVM 框架实现了服务。

服务是一种 IOC 模式,它删除了 ViewModel 和 View 层之间的任何引用。 在代码中,服务是在 ViewModel 代码中使用的接口,没有任何关于“何时”和“如何”实现该接口的假设。

您可以实现自己的自定义服务以及使用 DevExpress Services,无论您使用什么服务,通用工作流程都保持不变:

在代码中定义服务(如果您使用的是 DevExpress 已经实现的服务,则跳过);在特定的视图中注册它;在ViewModel中检索服务并使用其方法。DevExpress ServicesDevExpress MVVM框架已经为大多数常见任务提供了现成的服务——显示消息、弹出窗口、对话框、添加应用程序 UI 管理器文档等。例如,以下 ViewModel 代码通过定义 IMessageBoxService 类型的属性来检索 XtraMessageBoxService。

C#

//ViewModelpublic class MyViewModel {protected IMessageBoxService MessageBoxService {get { return this.GetServiceIMessageBoxService; }}}VB.NET

'ViewModelPublic Class MyViewModelProtected ReadOnly Property MessageBoxService As IMessageBoxServiceGetReturn Me.GetService(Of IMessageBoxService)End GetEnd Property重要提示:GetService方法不是线程安全的,不应从后台线程调用。

对于 POCO ViewModel,您可以使用以下故障安全语法,该语法将自动使用 this.GetService 方法或在出现问题时引发异常。

C#

//POCO ViewModelprotected virtual IMessageBoxService MessageBoxService {get { throw new System.NotImplementedException; }}VB.NET

//POCO ViewModelProtected Overridable ReadOnly Property MessageBoxService As IMessageBoxServiceGetThrow New System.NotImplementedExceptionEnd GetEnd Property检索服务后,您可以在 ViewModel 中使用其方法:

C#

public void SayHello {MessageBoxService.Show("Hello!");}VB.NET

Public Sub SayHelloMessageBoxService.Show("Hello!")End Sub最后,在视图中注册您的服务。 服务要么注册在本地容器中以在单个 View 中使用(本地服务),要么注册到允许您在整个应用程序中使用注册服务的全局静态(单例)服务容器(全局服务)。

C#

//Global serviceDevExpress.Mvvm.ServiceContainer.Default.RegisterService(new SomeService);//Local serviceserviceContainer.RegisterService(new SomeFilterService(ModuleType.MyCustomFilter));VB.NET

'Global serviceDevExpress.Mvvm.ServiceContainer.Default.RegisterService(New SomeService)'Local serviceserviceContainer.RegisterService(New SomeFilterService(ModuleType.MyCustomFilter))当创建 ViewModel 时,服务也可以在运行时在服务容器中注册。

C#

this.ServiceContainer.RegisterService(new Services.AnotherService);VB.NET

Me.ServiceContainer.RegisterService(New Services.AnotherService)最后,您可以通过在此级别提供自定义服务实现来覆盖 ViewModel 层次结构中任何级别的父级服务实现。

C#

serviceContainer.RegisterService(new NotImplementedCustomService(ModuleType.MyMainView));VB.NET

serviceContainer.RegisterService(New NotImplementedCustomService(ModuleType.MyMainView))使用 MvvmContext 组件,您无需记住这个底层服务容器机制。 该组件的 API 提供了易于使用的方法来注册全局和本地级别的服务。

C#

//Static method that registers the global DevExpress XtraDialogServiceMVVMContext.RegisterXtraDialogService;//Registers the Service1 service in the default service container (global service)mvvmContext1.RegisterDefaultService(new Service1);//Registers the local Service1 for use within the current View onlymvvmContext1.RegisterService(new Service2);VB.NET

'Static method that registers the global DevExpress XtraDialogServiceMVVMContext.RegisterXtraDialogService'Registers the Service1 service in the default service container (global service)mvvmContext1.RegisterDefaultService(New Service1)'Registers the local Service1 for use within the current View onlymvvmContext1.RegisterService(New Service2)许多随时可用的服务已经在全局静态容器中注册,因此您甚至不需要手动注册它们。 删除 MessageBox 服务演示中的 RegisterMessageBoxService 方法调用,您会注意到该服务仍在工作。

如果需要,您可以重新定义这些服务注册,为此请使用 MVVMContext 类的相应静态 Register... 方法。 例如,XtraMessageBox Service 和 FlyoutMessageBox Service 示例的 ViewModel 与第一个示例的 ViewModel 相同。 所有三个 ViewModel 都检索实现 IMessageBoxService 的服务,但是使用不同的静态 Register... 方法会强制使用不同的服务。

相同的方法允许来自 Dialog Services 组的示例显示不同的对话框,尽管 ViewModel 代码是相同的。

C#

protected IDialogService DialogService {get { return this.GetServiceIDialogService; }}VB.NET

Protected ReadOnly Property DialogService As IDialogServiceGetReturn Me.GetService(Of IDialogService)End GetEnd Property由于注册不同服务的视图代码而调用不同的对话框。

C#

//XtraDialog serviceMVVMContext.RegisterXtraDialogService;//FlyoutDialog serviceMVVMContext.RegisterFlyoutDialogService;VB.NET

'XtraDialog serviceMVVMContext.RegisterXtraDialogService'FlyoutDialog serviceMVVMContext.RegisterFlyoutDialogServiceDevExpress WinForm

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

相关文章

全民英雄小小英雄连锁第一个英雄叫什么?

普通关卡5--9出蓝色小小希望你别刷这个是全民英雄最难刷的英雄没有之一。经过无数人验证可以自查。挑战5-9出紫色小小这个比蓝色的稍微好刷点但是别在这浪费活力了,想刷出个小小?还不如刷个紫色流浪。第三个方法比前两个靠点铺,就是登入翻牌子。我出过一个。第四就是收集碎片看到就买三个,不要买第四个不值。这样...

滴滴现在到底合法吗?为什么我们这边还有抓滴滴专车的?

首先滴滴当然合法了,已经在国家层面承认了,滴滴平台已获得天津市颁发的《网络预约出租车汽车经营许可证》。 按照交通运输部等7部委发布的《网络预约出租汽车经营服务管理暂行办法》(简称“网约车新政”)的规定,网约车平台公司是运输服务的提供者,应具备线上、线下服务能力。 至于为什么你们当地还在抓,可能是信息...

微信聊天对方听不到声音是咋回事?

微信语音聊天对方听不到声音常见的原因及解决方法: 1、网络传送问题,及双方某一方信号不好,导致语音传送失败; 解决方法:结束当期微信语音聊天,检查双方网络设置,确保双方信号稳定,重新发起语音聊天 2、手机屏幕换屏之后,前置麦克风排线受到损坏。 解决方法:SIRI对它吼,底部波纹条有一定变化或iM...

济南至尊宝信息服务有限公司介绍?

济南至尊宝信息服务有限公司是2011-11-18在山东省济南市历下区注册成立的有限责任公司(自然人投资或控股),注册地址位于济南市历下区解放路30-1号国华经典3-1-1001室。济南至尊宝信息服务有限公司的统一社会信用代码/注册号是91370102582237816C,企业法人杨琨,目前企业处于开...

手机根目录下的的文件夹和文件是干什么的?

作用: 1.res:资源文件。 2.drawable:布局文件。 3.layout:布局文件。 4.anim:动画效果文件。 5.values:取值、字符串等。 6.src:代码,至于src内部的目录名称,取决于具体项目结构。 7.libs:库文件。 安卓手机: 安卓(Android)...

股票指标中总说的通气是什么意思啊?

所谓“通气”,反应在均线中就是:短期均线在长期均线上方,股价在短期均线上方,可以是5日均线在20日均线上方,也可以是45日均线在120均线上方;相对的,如果短期均线向下交叉了长期均线,则“不通气”。你观察一下股票的历史走势,所有中长线走出牛市的股票,其最赚钱的阶段都是所谓均线“通气”的时间段。 而这...

怎样提升自己的修养和内涵?

谢邀问,“有没有好的提升自己的"内涵"的方法?首先得弄清什么是"内涵”?所谓的"内涵",可能指的是"涵养吧?“涵养"指的是身心方面的修养功夫,指的是个人思想品德方面的进修和提高。要想提高"内涵,涵养,首先要加强树立自己的正气和底气,而这正气和底气就是表现在自己对问题的正确看法,正确的分析和处理的方法...

如何看待快播王欣?

“极客谈科技”,全新视角、全新思路,伴你遨游神奇的科技世界。欠了这么久的快播会员,是时候该进行还账啦!王欣最新力作,灵鸽APP上线。 灵鸽与快播有着最本质的区别,快播属于一款P2P视频共享播放软阿金,灵鸽则属于一款以供求关系为基础的新型社交化软件。灵鸽APP致力于帮助百万人群开创自己的虚拟公司,并且...

请问SunCorp这是什么牌子的手机啊

托普 SunCorp-Metway总部位于昆士兰州,是澳大利亚第六大银行和第二大保险公司。它拥有350多万名客户,7900多名员工,总资产超过190亿美元。SunCorp通过其223个分支机构和代理网点为客户提供包括银行私人业务、保险、财产管理和银行公司业务等在内的几百种产品和服务。Suncor...

看看海水稻的种植技术,怎么感觉就和我们的压碱改造差不多?

我是潮汕阿群,我来回答你的问题。内蒙古兴安盟举行耐盐碱水稻现场测产验收评议会,袁隆平团队大面积试种的耐盐碱水稻(海水稻)实测亩产达508.8公斤!远超袁隆平之前定下的目标:盐碱地pH值达9,或盐度在0.6%时,亩产要在300公斤以上。 这意味着什么?我国东北绝大部分地区盐碱地pH值为8左右,因此,这...

网捷贷显示es421是什么情况?

1.申请网捷贷提示信息“您的贷款申请审批未通过”错误原因:与系统数据不匹配等后台交易错误。 错误代码包括:370、512、522、533、542。 2.申请网捷贷提示信息“您的贷款申请审批未通过”错误原因:客户当前信用贷款余额或在我行的贷记卡透支或分期金额较大,导致客户可贷金额低于产品授信额度下限。...

福彩3D有百分之一百定独胆准确的方法吗?

:定独胆100%准确率肯定足没有的,就算双胆也没有,有人说他毒胆连中20多期这也是一个小的周期而已,相对于几千几百期只是一个很小的周期而已,如果谁非常自信的认为,他的独胆或双胆长期保持10中7以上,我可以非常肯定的说要么他是刚入彩市的小彩鸟而己,否则不可能认为长期双胆或独胆有稳中的,如果不是菜鸟就是...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。