界面控件DevExpressWPF入门指南MVVM框架BindableBase
DevExpress Universal Subscription官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网
BindableBase类实现 INotifyPropertyChanged 接口,并提供 API 以最少的编码声明可绑定属性。 可绑定属性
要声明可绑定属性,请执行以下操作: 从 BindableBase 类继承您的 ViewModel; 在属性 getter 和 setter 中使用 GetValue 和 SetValue 方法。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetValue(nameof(FirstName)); } set { SetValue(value, nameof(FirstName)); } } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName() As String Get Return GetValue(Of String)(NameOf(FirstName)) End Get Set(ByVal value As String) SetValue(value, NameOf(FirstName)) End Set End Property End Class
BindableBase 类公开使用 CallerMemberNameAttribute 的 GetValue 和 SetValue 重载,您不必将属性名称传递给这些方法的参数,这简化了可绑定属性声明:
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetValue(); } set { SetValue(value); } } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName() As String Get Return GetValue(Of String)() End Get Set(ByVal value As String) SetValue(value) End Set End Property End Class
注意 :CallerMemberNameAttribute 在 .NET Framework 4.5 及更高版本中可用。
属性值存储在内部字典中: GetValue 方法使用此字典获取属性值; SetValue 方法使用属性名称作为键将属性值存储在字典中。
SetValue 方法返回指示属性是否已更改的 True 或 False 值。 如果为属性设置相同的值,SetValue 方法将返回 False,并且不会发送更改通知。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetValue(); } set { if (SetValue(value)) NotifyFullNameChanged(); else MessageBox.Show("Could not change value!"); } } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName() As String Get Return GetValue(Of String)() End Get Set(ByVal value As String) If Not SetValue(value) Then NotifyFullNameChanged() Else MessageBox.Show("Could not change value!") End If End Set End Property End Class属性值更改时运行自定义代码
SetValue 方法具有将回调方法作为参数的重载,在更改属性值后调用此回调。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetValue(); } set { SetValue(value, changedCallback: OnFirstNameChanged); } } void OnFirstNameChanged() { //... } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName() As String Get Return GetValue(Of String)() End Get Set(ByVal value As String) SetValue(value, changedCallback:= AddressOf OnFirstNameChanged) End Set End Property Sub OnFirstNameChanged() "... End Sub End Class手动引发 INotifyPropertyChanged.PropertyChanged
如果您需要为特定属性引发 INotifyPropertyChanged.PropertyChanged 事件,请使用 RaisePropertyChanged/RaisePropertiesChanged 方法。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetValue(); } set { SetValue(value, changedCallback: NotifyFullNameChanged); } } public string LastName { get { return GetValue(); } set { SetValue(value, changedCallback: NotifyFullNameChanged); } } public string FullName { get { return FirstName + " " + LastName; } } void NotifyFullNameChanged() { RaisePropertyChanged(nameof(FullName)); } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName() As String Get Return GetValue(Of String)() End Get Set(ByVal value As String) SetValue(value, changedCallback:= AddressOf NotifyFullNameChanged) End Set End Property Public Property LastName() As String Get Return GetValue(Of String)() End Get Set(ByVal value As String) SetValue(value, changedCallback:= AddressOf NotifyFullNameChanged) End Set End Property Public ReadOnly Property FullName() As String Get Return FirstName & " " & LastName End Get End Property Private Sub NotifyFullNameChanged() RaisePropertyChanged(Function() FullName) End Sub End Class使用带有支持字段的属性
当一个属性被频繁访问或更新时,应用程序的性能可能会降低,因为属性值存储在字典中。 要提高应用程序的性能,请将属性值存储在支持字段中。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { string _FirstName; public string FirstName { get { return _FirstName; } set { SetValue(ref _FirstName, value, changedCallback: NotifyFullNameChanged); } } } VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Private _FirstName As String Public Property FirstName() As String Get Return _FirstName End Get Set(ByVal value As String) SetValue(_FirstName, value, changedCallback:= AddressOf NotifyFullNameChanged) End Set End Property End Class.NET Framework 4.0 中的 BindableBase
可绑定属性
使用 GetProperty 和 SetProperty 方法来实现可绑定属性。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetProperty(() => FirstName); } set { SetProperty(() => FirstName, value); } } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName As String Get Return GetProperty(Function() FirstName) End Get Set(value As String) SetProperty(Function() FirstName, value) End Set End Property End Class
GetProperty 和 SetProperty 方法的第一个参数是一个 lambda 表达式,它返回用于标识目标属性名称的属性。 属性名称是使用静态 BindableBase.GetPropertyName 方法在内部获取的。
属性值更改时运行自定义代码
SetProperty 方法返回指示属性是否已更改的 True 或 False 值。如果将该属性设置为相同的值,SetProperty 方法将返回 False,并且不会发送更改通知。 SetProperty 方法具有将回调方法作为参数的重载,此回调在字段更改后调用。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FirstName { get { return GetProperty(() => FirstName); } set { SetProperty(() => FirstName, value, OnFirstNameChanged); } } void OnFirstNameChanged() { //... } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public Property FirstName As String Get Return GetProperty(Function() FirstName) End Get Set(value As String) SetProperty(Function() FirstName, value, AddressOf OnFirstNameChanged) End Set End Property Sub OnFirstNameChanged() "... End Sub End Class
手动引发 INotifyPropertyChanged.PropertyChanged
如果您需要为特定属性引发 INotifyPropertyChanged.PropertyChanged 事件,请使用 RaisePropertyChanged/RaisePropertiesChanged 方法。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } } public string FirstName { get { return GetProperty(() => FirstName); } set { SetProperty(() => FirstName, value, OnFirstNameChanged); } } public string LastName { get { return GetProperty(() => LastName); } set { if(SetProperty(() => LastName, value)) RaisePropertyChanged(() => FullName); } } void OnFirstNameChanged() { RaisePropertyChanged(() => FullName); } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Public ReadOnly Property FullName As String Get Return String.Format("{0} {1}", FirstName, LastName) End Get End Property Public Property FirstName As String Get Return GetProperty(Function() FirstName) End Get Set(value As String) SetProperty(Function() FirstName, value, AddressOf OnFirstNameChanged) End Set End Property Public Property LastName As String Get Return GetProperty(Function() LastName) End Get Set(value As String) If SetProperty(Function() LastName, value) Then RaisePropertyChanged(Function() FullName) End If End Set End Property Sub OnFirstNameChanged() RaisePropertyChanged(Function() FullName) End Sub End Class
使用带有支持字段的属性
当属性被频繁更新时(由于从 lambda 表达式计算属性名称并将属性值存储在字典中),应用程序性能可能会降低。 要适应这些情况,请使用存储变量来存储属性,并使用 BindableBase.GetPropertyName 方法从静态构造函数计算一次属性名称。
C# using DevExpress.Mvvm; public class ViewModel : BindableBase { static string Property1Name; static ViewModel() { Property1Name = BindableBase.GetPropertyName(() => new ViewModel().Property1); } string property1; public string Property1 { get { return property1; } set { SetProperty(ref property1, value, Property1Name); } } }
VB.NET Imports DevExpress.Mvvm Public Class ViewModel Inherits BindableBase Shared Property1Name As String Shared Sub New() Property1Name = BindableBase.GetPropertyName(Function() New ViewModel().Property1) End Sub Dim _Property1 As String Public Property Property1 As String Get Return _Property1 End Get Set(value As String) SetProperty(_Property1, value, Property1Name) End Set End Property End Class
DevExpress WPF
DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。
为什么在浙江省Mac台式电脑的所有部件均享受3年保修期?因为浙江省出了一个很牛的工商局长,郑宇民局长,当年郑宇民局长跟央视主持人董倩关于国有企业民营企业的论辩现在还依稀在耳。这样的政策不是地域歧视而应该自豪很多人可能说浙江有这样的政策,
iphonex倒过来用是不是就没有刘海了?iPhoneX一经发布,就引起舆论海啸,惊艳的全面屏设计让人印象深刻,唯独置于上部的刘海让人褒贬不一。那么如果换成下巴又会是怎么样的体验?不用脑补,这就满足你们。下图为桌面状态对比
为什么录音比自己真实声音难听?谢邀!为什么录音比自己真实声音难听?因为,录音和现实听到的自己的声音原本就是两种声音,这两种声音的构成成分本身就是不同的,听起来自然也不一样。至于说录音听起来更难听,是因为第一,录
什么原因让你电脑打字一直用五笔?没啥就是快,方便。电脑键盘打五笔确实爽,所有字都习惯在反应中,不需要记字根,想字根。手机打字就还是九宫格好用,记得最早手机用的诺基亚E63全键盘手机时就是用五笔,那感觉和电脑一样一
电商平台舍本逐末的促销套路坑人害己原来双12开始了,不说我都忘了。记者观察到,前有双11,紧接着元旦促销年货节将接踵而至,夹在中间的双12变成一个尴尬的促销节日。而双11后爆出的欧莱雅安瓶面膜价差事件中消协点名薇诺
国外服务器对电商有何影响,该如何选择服务器?电商选择港澳台及海外地区的服务器主要考虑与用户的距离,距离越短,访问速度越快,页面延迟打不开的现象更少,可以提高交易的成功率。相比传统物理服务器,现在越来越多的电商都会选云服务器,
如何把两个视频连接起来?用剪映app进行编辑就可以啦。希望我的回答对你有用哦我自己用的剪映,非常简单好用,拼接特效,转场等都挺多的,推荐用剪辑师剪辑我自己用的是美图秀秀或剪映1打开电脑中安装的速转视频转换
跨境电商平台有哪些?(下篇)继续我们上篇还没讲完的内容,跨境电商平台很多,我就罗列一些大的主流的平台。13Rumall2016年5月,丰卖网俄罗斯站点(httpRumall。com)进入试运营,2016年9月
比特币是什么?简单的讲,比特币只是区块链技术数字货币的一种,其实还有其他的币种,但原理都是一样的,就是在所有人的电脑端,都存放有一个帐本,所有帐本都记录了所有比特币的存量,任何一个人,篡改账本上
有没有人从始至终都没用过苹果手机?有没有人从始至终都没有用过苹果手机?大多数人从始至终都没有用过苹果手机。这些人是什么样的人?这些人大多都是勤劳朴实的劳动者。有什么样的特质?这些人大都认认真真地工作,踏踏实实地挣钱
助力元宇宙虚实相生脑机接口从科幻走向现实道阻且长本报记者李冰见习记者余俊毅张博日前,埃隆马斯克的Neuralink公司宣布其脑机接口预计将在2022年之前植入人体,把大脑的数据读出来,把外部世界的数据送进去。之前他们成功让猴子通