范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

界面控件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控件来实现。

老旧机型价更香?三款上市1年左右的手机,款款值得买在手机行业流传着这样一句话买新不买旧,确实手机更新迭代的速度那么快,新手机都在不断贬值,何况是上市已久的老旧机型。虽然如此,但还是有些用户喜欢买旧款手机,因为经过时间的洗礼老旧机型让Win11使用Win10Win7开始菜单任务栏磨砂效果Windows11采用了全新的开始菜单界面,不少用户吐槽不好用,因为Windows10的磁贴开始菜单,你可以分组把常用软件Pin到里面,还有一些用户习惯了传统的经典开始菜单。最开始还是十三香!苹果内部人士明确表态,iPhone13新功能十分强大自从乔布斯发布世界首款智能手机iPhone后,苹果就成为了智能手机行业的风向标,虽然如今已沦落为世界第三大手机厂商,但是其在行业内的地位,除了华为外,是任何手机厂商无法撼动的。近几华为智慧屏V75Super横评,2W元电视神仙打架(音质ampampamp系统篇)华为在7月29日的发布会上,发布了全新的华为智慧屏新品V75Super,这款智慧屏是华为首款鸿鹄SuperMiniLED智慧屏,使用了顶级的MiniLED背光解决方案,46080颗谷歌Pixel6被曝9月13日发布,首发安卓12操作系统,搭载自研芯片众所周知,安卓系统是由谷歌研发而来,除了安卓系统以外,谷歌旗下其实也有手机产品线,并且也有多年的产品迭代,只不过未在国内市场发布而已。不过,今年的谷歌Pixel6系列吸引了国内不少到底是谁发明了996工作制?或可能是小米雷军近日,随着人社部和最高法联合发布10个超时加班典型案例后,明确把996,007为企业划红线,明确指出996和007都违法!这才注定了996正式成为过去式。那么,互联网行业的996到智能家居,格力空调为什么掉队了?格力作为一家老牌家电厂商,在空调领域是数一数二的存在。如此一个空调行业的巨无霸,在家电智能化的道路上,为什么落后了呢?本文将从智能家居的发展格力空调为何掉队以及格力之后应该怎么走三iPhone13重磅新功能,不怕没信号关注公众号果粉机帮助果粉们快速成长时间的推移,新iPhone的传闻越来越多。Apple即将在2021年9月,发布iPhone13。新设备发布之际,来猛料!iPhone13设备更强悍原来微信隐藏7个技巧,小功能大作用,看完感觉自己用了假微信微信更新一直以来都很频繁,虽然给用户带来了很多新体验,但还有很多隐藏的功能,我们都没来得及发现。这里就来分享微信隐藏的7个小技巧,小功能大作用,看完觉得自己用了个假微信。1群聊指定三星ZFold3ZFlip3将支持电池保护功能,销量火爆8月28日消息三星GalaxyZFold3和GalaxyZFlip3搭载的是三星基于Android操作系统开发的最新版OneUI3。1。1,虽然相比OneUI3。1版本没有大升级,原来微信就有抠图的功能,教你详细的抠图教程,简单实用我们在生活中经常会用到给我们的照片换个背景或者是给背景换个照片等等,让我们的照片变得更美观!这时就需要我们用到一个抠图的功能,其实在微信中就有这样一个小功能,而且操作非常简单,相信
招商经理不下链接,亚马逊店铺怎么注册?今年的亚马逊招商政策和去年有很大的区别。去年6月,最让卖家们担心的是二审的问题。而今年进入6月以来,招商经理突然宣布不下链接了。尤其是6月中旬以后,亚马逊店铺注册的二审概率没有明确怎么判断一家亚马逊代运营公司的运营实力?就目前的形势来说,亚马逊虽然很热门,有很多工厂和品牌想参与进来,但是懂得运营的企业太少了。有好产品,却不懂得如何运营,于是就有了亚马逊代运营公司。那么,工厂和品牌在选择亚马逊代运营亚马逊2020年新政,这两类卖家将会遭受致命打击亚马逊作为全球最大的跨境电商平台,有着数以亿万计的用户和卖家群体,它的每一次政策更新,都会给跨境电商圈造成巨大的影响。近日,亚马逊发布了2020年一项新政策,让商标再次成为丝路互联亚马逊现在还好做吗?新卖家半年盈利十万是怎么做到的我跟部分学员讲过一个案例,2018年年底的一个学员,40多岁,男性,江苏某电机厂老板,找我们代注册亚马逊北美站,并参加了当月举办的亚马逊运营初级班,学习了基础的产品上架编写list亚马逊代运营公司做日本站,都选哪些产品?最近发现一个比较有意思的现象!关注亚马逊日本站企业突然多了起来。前些年,卖家大部分都是在亚马逊欧洲站和北美站之间纠结徘徊,日本虽然近在咫尺,却一直备受冷落。这是为什么呢?融皓科技扫新手入驻亚马逊全球开店要注意哪些坑?这3点很重要新手做亚马逊的坑有很多,要做起来一个店铺,需要很多个环节,包括亚马逊全球开店选品视觉设计(图片拍摄)店铺运营物流站外推广第三方收付款等多个环节,这些都是第三方的,还不包括亚马逊本身如何在BigSur中获取macOSMontereySafari新标签版您不必等到秋天,也不必冒险安装macOSMonterey的Beta版来尝试即将到来的Safari标签版。只要您拥有macOSBigSur11。3或更高版本,就可以在BigSur上查一个人没有出息的9大表现,原因很真实,对照反省温馨提示阅读前,请点击右上角关注,每天可以免费获取我分享的关于人力资源和管理的干货实战内容。一个人有没有出息,是与自身的性格特征息息相关的。有下面九种表现的人,一辈子也不会有出息了成年人的崩溃,都是静悄悄你能挺过多少坎,就能成多大事温馨提示阅读前,请点击右上角关注,每天可以免费获取我分享的关于人力资源和管理的干货实战内容。作者崔永旺来源插坐学院有人说,成年人的崩溃,都是静悄悄的。看起来很正常,会说笑会打闹会社新手入驻亚马逊全球开店的坑有哪些?这3点很重要新手做亚马逊的坑有很多,要做起来一个店铺,需要很多个环节,包括亚马逊全球开店选品视觉设计(图片拍摄)店铺运营物流站外推广第三方收付款等多个环节,这些都是第三方的,还不包括亚马逊本身亚马逊全球开店招商政策调整,亚马逊代运营公司是这么应对的2021年,是亚马逊卖家的多事之秋,上半年国内多个大卖被封号,亚马逊全球开店的政策一直在调整,招商链接时而能下,时而不能下。2022年的招商马上就要开始了,亚马逊招商政策又会有哪些