WinForm应用界面美化攻略 - MVVM - 高级绑定功能

这篇具有很好参考价值的文章主要介绍了WinForm应用界面美化攻略 - MVVM - 高级绑定功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

获取工具下载 - 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})")

您可以添加Format Specifiers来应用其他数字、日期时间和时间跨度格式,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 方法。 此方法接受以下参数:

  • 控件名称;
  • 应该绑定的控件属性;
  • 一个字符串数组,填充了可绑定的 ViewModel 属性的名称,这些属性的值应该组合在一起;
  • 一个格式字符串(对于不可编辑控件)或一对转换器(如果允许用户编辑绑定控件)。

DevExpress 演示中心提供了两个模块,它们将 FirstName 和 LastName 属性的值组合到一个 TextEdit 编辑器中。 使用格式字符串的模块将属性绑定到禁用(不可编辑)的编辑器,在使用转换器的模块中,您可以更改 TextEdit 值并将更新后的字符串传递回 ViewModel 属性。

Format string demo

C#

var fluent = mvvmContext.OfType<ViewModel>();
mvvmContext.SetMultiBinding(
editForFullName,
e => e.Text,
new string[] { "FirstName", "LastName" },
"{1}, {0}"
);

VB.NET

Dimfluent = mvvmContext.OfType(Of ViewModel)()
mvvmContext.SetMultiBinding(editForFullName, Function(e) e.Text, New String() { "FirstName", "LastName" }, "{1}, {0}")

Converters demo

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 | 下载试用

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


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

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

 文章来源地址https://www.toymoban.com/news/detail-464708.html

到了这里,关于WinForm应用界面美化攻略 - MVVM - 高级绑定功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用jsp实现简单登入注册界面功能(css美化)(软件idea)

    号外号外,我最近发现了一个非常棒的人工智能学习网站,它的内容通俗易懂,风趣幽默,让人印象深刻。我想和大家分享这个网站,点击链接即可访问。 首先我们来看看效果 创建项目,再添加框架支持,把文件全部创建到通一个目录里面,新建image文件夹,放入我们的背景

    2024年02月03日
    浏览(47)
  • 界面控件DevExpress WinForm中文教程 - 如何应用Windows 11 UI?

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

    2024年02月08日
    浏览(51)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件

    在我们开发的前端项目中,往往为了方便,都需对一些控件进行自定义的处理,以便实现快速的数据绑定以及便捷的使用,本篇随笔介绍通过抽取常见字典列表,实现通用的字典类型绑定;以及通过自定义控件的属性处理,实现系统字典内容的快捷绑定的操作。 在我们创建下

    2024年02月08日
    浏览(57)
  • Winform(C#) 国内开源美化控件主题库1 SunnyUI

    SunnyUI.Net 是基于.Net Framework 4.0+、.Net Core3.1、.Net 5 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。 帮助文档: https://gitee.com/yhuse/SunnyUI/wikis/pages Gitee: https://gitee.com/yhuse/SunnyUI demo 基于.Net Framework4.0,原生控件开发,参考 Element主题风格,包含 按钮、编辑框

    2024年02月16日
    浏览(36)
  • ApeForms | WinForm窗体UI美化库(Metro扁平风格)演示与安装

    ApeForms 是一套基于WinForm框架免费的UI库,提供了丰富的Metro风格控件、针对WinForm开发中常见类型的扩展、通用Dialog/Notification的模板等。 目前 ApeForms 仍在持续开发扩充更多的控件,如果有好的建议可以在评论区留言。 通过NuGet可以直接将 ApeForms 引用到项目中。 演示视频 录制

    2024年01月18日
    浏览(42)
  • Winform(C#) 国内开源美化控件主题库2:花木兰控件库

    地址 博客:https://www.cnblogs.com/tlmbem/控件的介绍。 gitee:https://gitee.com/tlmbem/hml 介绍 基于 C#(语言) 4.0 、 VS2019 、 Net Framework 4.0(不包括Net Framework 4.0 Client Profile) 开发的Winform控件库。为了兼容性采用了C#(语言) 4.0版本,低版本VS也可以编译该项目。整个控件控除了动画函数由

    2024年02月05日
    浏览(38)
  • C#实例:多功能Windows窗体应用程序Helloworld_WinForm

    有了创建一个Windows窗体应用程序的经验,就可以开始尝试运用更多的控件实现更多丰富的功能界面。以下分享我基于项目Helloworld_WinForm 使用常用C#Windows窗体控件 实现一些小功能。 每一节标题为所用到的控件,全文以实际制作过程为序编制。 1、创建窗体Form 项目创建时会默

    2024年02月04日
    浏览(54)
  • WPF 如何实现事件绑定 (MVVM)

    首先说到绑定,一般是在WPF 中常见的,因为WPF中有一个比较好用的框架叫做 MVVM 所以View层的按钮等元件的的动作都是需要和后台ViewModel 中的函数进行绑定的。 如 我们最常见的按钮的command 绑定 这里面的command 是命令,不是事件 如果点击图片,或者按钮抬起来的时候需要触

    2024年02月04日
    浏览(51)
  • WPF控件:密码框绑定MVVM

    以下是一种使用 MVVM 模式的方法: 首先,在 ViewModel 中添加一个属性来保存密码,我们可以使用 SecureString 类型。   创建一个附加属性来处理 PasswordBox 的密码变化,并将其绑定到 ViewModel 中的命令。   在 XAML 中,使用行为触发器来触发命令。 查看密码框的内容。      

    2024年04月24日
    浏览(33)
  • python美化图形化界面设计,pythontkinter界面美化

    大家好,本文将围绕python美化图形化界面设计展开说明,pythontkinter界面美化是一个很多人都想弄明白的事情,想搞清楚python美化输出模块需要先了解以下几个事情。 PyQt,一个基于Qt的Python接口包,可以直接使用Qt的控件薯轿茄,还可以使用QSS进行界面美化,下面我简单介绍一

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包