提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:龚雪|2021-11-23 10:18:31.557|阅读 258 次
概述:DevExpress WinForm创建的应用程序可利用MVVM设计模式,本文主要介绍高级绑定功能,欢迎下载最新版体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
获取工具下载 - DevExpress WinForm v21.2
转换器允许您动态转换可绑定的属性值。
默认转换器
DevExpress MVVM 框架自动管理简单的类型转换。 例如,在 Binding via Default Converters 演示中,字符串 TextEdit.Text 属性绑定到整数 ViewModel Progress 属性。 在这里,框架将属性值从 Int32 转换为 String 并返回。
C#
//View code var fluent = mvvmContext.OfType<ViewModel>(); fluent.SetBinding(editor, e => e.Text, x => x.Progress); //ViewModel code public class ViewModel { public virtual int Progress { get; set; } }
VB.NET
'View code Dim fluent = mvvmContext.OfType(Of ViewModel)() fluent.SetBinding(editor, Function(e) e.Text, Function(x) x.Progress) 'ViewModel code Public Class ViewModel Public Overridable Property Progress() As Integer End Class
当框架转换值时,MvvmContext 组件会触发 BindingConvert 事件,您可以处理此事件以调整转换逻辑。Binding with Custom Conversion Handling demo演示说明了一个 TextEdit 编辑器,其 EditValue 属性绑定到整数 ViewModel Value 属性。如果用户将 TextEdit 留空,则编辑器的 EditValue 为 null,因为自动转换无法将 null 转换为 Int32。 在这种情况下,使用 BindingConvert 事件处理程序将 null 更改为 0。
C#
//View code var fluent = mvvmContext.OfType<ViewModel>(); mvvmContext.BindingConvert += (s, e) => { string strValue = e.Value as string; if(strValue != null) { int intValue; if(int.TryParse(strValue, out intValue)) e.Value = intValue; else e.Value = null; } if(e.Value == null) e.Value = 0; }; fluent.SetBinding(editor, e => e.EditValue, x => x.Value);
VB.NET
'View code Dim fluent = mvvmContext.OfType(Of ViewModel)() AddHandler mvvmContext.BindingConvert, Sub(s, e) Dim strValue As String = TryCast(e.Value, String) If strValue IsNot Nothing Then Dim intValue As Integer = Nothing If Integer.TryParse(strValue, intValue) Then e.Value = intValue Else e.Value = Nothing End If End If If e.Value Is Nothing Then e.Value = 0 End If End Sub fluent.SetBinding(editor, Function(e) e.EditValue, Function(x) x.Value)
自定义转换器
当您使用无法自动转换的复杂属性类型时,您需要传递两个转换器作为最后的 SetBinding 方法参数。 第一个转换器将可绑定属性值转换为可接受的类型,而第二个转换器则相反。
Binding via Custom Converters demo说明了一个带有 ModelState 属性的 ViewModel,该属性接受自定义 State 枚举值,此属性绑定到类型为 System.Windows.Forms.CheckState 的 CheckBox.CheckState 属性,SetBinding 方法中的 Lambda 表达式是转换属性值的转换器。
C#
//View code var fluent = mvvmContext.OfType<ViewModel>(); fluent.SetBinding(check, e => e.CheckState, x => x.ModelState, modelState => { // Convert the ViewModel.State to CheckState switch(modelState) { case ViewModel.State.Active: return CheckState.Checked; case ViewModel.State.Inactive: return CheckState.Unchecked; default: return CheckState.Indeterminate; } }, checkState => { // Convert back from CheckState to the ViewModel.State switch(checkState) { case CheckState.Checked: return ViewModel.State.Active; case CheckState.Unchecked: return ViewModel.State.Inactive; default: return ViewModel.State.Suspended; } }); //ViewModel code public class ViewModel { public virtual State ModelState { get; set; } public enum State { Suspended = 0, Inactive = 1, Active = 2 } }
VB.NET
Dim fluent = mvvmContext.OfType(Of ViewModel)() fluent.SetBinding(check, Function(e) e.CheckState, Function(x) x.ModelState, Function(modelState) Select Case modelState Case ViewModel.State.Active [Return] CheckState.Checked Case ViewModel.State.Inactive [Return] CheckState.Unchecked Case Else [Return] CheckState.Indeterminate End Select End Function, Function(checkState) Select Case checkState Case CheckState.Checked [Return] ViewModel.State.Active Case CheckState.Unchecked [Return] ViewModel.State.Inactive Case Else [Return] ViewModel.State.Suspended End Select End Function) 'ViewModel code Public Class ViewModel Public Overridable Property ModelState() As State Public Enum State Suspended = 0 Inactive = 1 Active = 2 End Enum End Class
如果不允许用户编辑 View 元素的属性值,则可以跳过反向转换。
要格式化绑定属性值,请将字符串格式表达式传递给 SetBinding 方法,{0} 字符序列是属性值的占位符。
C#
var fluent = mvvmContext.OfType<ViewModel>(); fluent.SetBinding(labelControl, l => l.Text, x => x.Value, "Bound property value is ({0})");
VB.NET
Dim fluent = mvvmContext.OfType(Of ViewModel)() fluent.SetBinding(labelControl, Function(l) l.Text, Function(x) x.Value, "Bound property value is ({0})")
您可以添加来应用其他数字、日期时间和时间跨度格式,MVVM Best Practices demo说明了如何将整数值显示为货币。
C#
var fluent = mvvmContext.OfType<ViewModel>(); fluent.SetBinding(label, l => l.Text, x => x.Price, "Price: {0:C2}");
VB.NET
Dim fluent = mvvmContext.OfType(Of ViewModel)() fluent.SetBinding(label, Function(l) l.Text, Function(x) x.Price, "Price: {0:C2}")
将多个属性绑定到同一个控件
要在同一控件中组合多个属性的值,请使用 MvvmContext.SetMultiBinding 方法。 此方法接受以下参数:
DevExpress 演示中心提供了两个模块,它们将 FirstName 和 LastName 属性的值组合到一个 TextEdit 编辑器中。 使用格式字符串的模块将属性绑定到禁用(不可编辑)的编辑器,在使用转换器的模块中,您可以更改 TextEdit 值并将更新后的字符串传递回 ViewModel 属性。
C#
var fluent = mvvmContext.OfType<ViewModel>(); mvvmContext.SetMultiBinding( editForFullName, e => e.Text, new string[] { "FirstName", "LastName" }, "{1}, {0}" );
VB.NET
Dim fluent = mvvmContext.OfType(Of ViewModel)() mvvmContext.SetMultiBinding(editForFullName, Function(e) e.Text, New String() { "FirstName", "LastName" }, "{1}, {0}")
C#
var fluent = mvvmContext.OfType<ViewModel>(); mvvmContext.SetMultiBinding( editForFullName, e => e.EditValue, new string[] { "FirstName", "LastName" }, values => string.Join(",", values), value => ((string)value).Split(',') );
VB.NET
Dim fluent = mvvmContext.OfType(Of ViewModel)() mvvmContext.SetMultiBinding( editForFullName, Function(e) e.EditValue, New String() { "FirstName", "LastName" }, Function(values) String.Join(",", values), Function(value) CStr(value).Split(","c))
DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
更多产品正版授权详情及优惠,欢迎咨询
DevExpress技术交流群5:742234706 欢迎一起进群讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
在工业自动化和数据通讯的领域,提到“OPC Server”这个术语时,很多人可能会感到困惑,甚至不清楚它到底是什么。其实,OPC Server在现代制造业和智能工厂中有着非常重要的作用,它是实现设备与系统之间数据交换的核心组成部分。为了帮助大家更好地理解OPC Server,今天我们将从最基础的概念开始,详细解释它是什么、如何工作以及它的应用。
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢