最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 构建MVVM应用程序时需要注意的所有MVVM框架惯例【一】

    MVVM 框架以自己的方式处理您的应用程序代码并解释特定的代码片段,例如如果语法正确,属性可以被认为是可绑定的,这些语法规则称为约定。约定允许您避免编写额外的代码,因为框架将“理解”您对它的期望并自动生成它需要的一切。本文档收集了您在构建 MVVM 应用程序时需要了解的所有 MVVM 框架约定。

    DevExpress Universal Subscription 官方最新版免费下载试用、历史版下载、在线文档和帮助文件下载-huidu.com

    可绑定属性

    所有公共自动实现的虚拟属性都被认为是可绑定的。

    C#

    public virtual string Test { get; set; }

    VB.NET

    Public Overridable Property Test() As String

    要禁用为此类属性生成可绑定属性,请使用 Bindable 属性,如下所示。

    C#

    [Bindable(false)]
    public virtual string Test { get; set; }

    VB.NET

    
    Public Overridable Property Test() As String

    框架会忽略具有支持字段的属性,您可以使用 BindableProperty 属性显式标记此类属性,以便仍然能够将它们用于数据绑定。

    C#

    using DevExpress.Mvvm.DataAnnotations;
    //. . .
    string test;
    [BindableProperty]
    public virtual string Test
    {
    get { return test; }
    set { test = value; }
    }

    VB.NET

    Imports DevExpress.Mvvm.DataAnnotations
    '. . .
    Private testField As String
    
    Public Overridable Property Test() As String
    Get
    Return testField
    End Get
    Set(ByVal value As String)
    testField = value
    End Set
    End Property

    属性依赖

    属性可以在应用程序运行时改变它们的值,来跟踪和响应这些改变,声明属性依赖。属性依赖是一种在其关联属性发生更改或即将更改时自动执行的方法。为此,必须调用 OnChanging 或 OnChanged 方法。

    C#

    public virtual string Test { get; set; }
    protected void OnTestChanged() {
    //do something
    }

    VB.NET

    Public Overridable Property Test() As String
    Protected Sub OnTestChanged()
    'do something
    End Sub

    On…Changed 和 On..Changing 方法也可以有一个参数,在这种情况下,参数将分别接收旧的或新的属性值。

    C#

    public virtual string Test { get; set; }
    protected void OnTestChanging(string newValue) {
    //do something
    }
    protected void OnTestChanged(string oldValue) {
    //do something
    }

    VB.NET

    Public Overridable Property Test() As String
    Protected Sub OnTestChanging(ByVal newValue As String)
    'do something
    End Sub
    Protected Sub OnTestChanged(ByVal oldValue As String)
    'do something
    End Sub

    BindableProperty 属性还允许您使用具有不同名称的方法。

    C#

    [BindableProperty(OnPropertyChangingMethodName = "BeforeChange", OnPropertyChangedMethodName = "AfterChange")]
    public virtual string Test { get; set; }
    protected void BeforeChange() {
    //. . .
    }
    protected void AfterChange() {
    //. . .
    }

    VB.NET

    
    Public Overridable Property Test() As String
    Protected Sub BeforeChange()
    '. . .
    End Sub
    Protected Sub AfterChange()
    '. . .
    End Sub

    命令

    在 POCO ViewModels 中声明的所有具有零个或一个参数的公共 void 方法都被视为命令。

    C#

    public void DoSomething(object p) {
    MessageBox.Show(string.Format("The parameter passed to command is {0}.", p));
    }

    VB.NET

    c语言图形界面编程教程_c语言 图形用户界面_c语言linux图形界面

    Public Sub DoSomething(ByVal p As Object)
    MessageBox.Show(String.Format("The parameter passed to command is {0}.", p))
    End Sub

    名称以 …Command 结尾的方法会引发异常,您可以通过使用 Command 属性标记这些方法并通过 Name 参数设置适当的名称来强制框架将这些方法视为有效命令。

    C#

    using DevExpress.Mvvm.DataAnnotations;
    [Command(Name="DoSomething")]
    public void DoSomethingCommand(object p) {
    //do something
    }

    VB.NET

    Imports DevExpress.Mvvm.DataAnnotations
    
    Public Sub DoSomethingCommand(ByVal p As Object)
    'do something
    End Sub

    对于每个命令方法,框架都会生成相应的支持属性。默认情况下c语言 图形用户界面,此属性以带有“Command”后缀的关联方法命名。您可以使用 Command 属性的 Name 参数为此自动生成的支持属性保留另一个名称。

    C#

    [Command(Name = "MyMvvmCommand")]
    public void DoSomething(object p) {
    //do something
    }

    VB.NET

    'this command will be executed only if "p" equals 4
    Public Sub DoSomething(ByVal p As Integer)
    MessageBox.Show(String.Format("The parameter passed to command is {0}.", p))
    End Sub
    Public Function CanDoSomething(ByVal p As Integer) As Boolean
    Return (2 + 2) = p
    End Function

    通过使用 Command 属性的 CanExecuteMethodName 参数,具有其他名称的 CanExecute 方法仍然可以绑定到命令。

    C#

    [Command(CanExecuteMethodName = "DoSomethingCriteria")]
    public void DoSomething(int p) {
    MessageBox.Show(string.Format("The parameter passed to command is {0}.", p));
    }
    public bool DoSomethingCriteria(int p) {
    return (2 + 2) == p;
    }

    VB.NET

    
    Public Sub DoSomething(ByVal p As Integer)
    MessageBox.Show(String.Format("The parameter passed to command is {0}.", p))
    End Sub
    Public Function DoSomethingCriteria(ByVal p As Integer) As Boolean
    Return (2 + 2) = p
    End Function

    当命令刚刚绑定到它的目标(以获取目标的初始状态)时,首先检查 CanExecute 子句。稍后,每次 CanExecuteChanged 事件通知命令的目标有关命令状态更改时,都会重新评估此条件。此事件在底层命令对象级别声明,要从 ViewModel 级别发送此类通知,请调用 RaiseCanExecuteChanged 扩展方法,如下所示。

    C#

    //a bindable property
    public virtual bool IsModified { get; protected set; }
    //a command
    public void Save() {
    //. . .
    }
    //a CanExecute condition
    public bool CanSave() {
    return IsModified;
    }
    //the OnChanged method calls the RaiseCanExecuteChanged method for the "Save" command
    //this forces the command to update its CanExecute condition
    public void OnIsModifiedChanged() {
    this.RaiseCanExecuteChanged(x=>x.Save());
    }

    VB.NET

    'a bindable property
    Private privateIsModified As Boolean
    Public Overridable Property IsModified() As Boolean
    Get
    Return privateIsModified
    End Get
    Protected Set(ByVal value As Boolean)
    privateIsModified = value
    End Set
    End Property
    'a command
    Public Sub Save()
    '. . .
    End Sub
    'a CanExecute condition
    Public Function CanSave() As Boolean
    Return IsModified
    End Function
    'the OnChanged method calls the RaiseCanExecuteChanged method for the "Save" command
    'this forces the command to update its CanExecute condition
    Public Sub OnIsModifiedChanged()
    Me.RaiseCanExecuteChanged(Sub(x) x.Save())
    End Sub

    服务

    为了解析服务,框架会覆盖接口类型的虚拟属性c语言 图形用户界面,其名称必须以 …Service 结尾。

    C#

    public virtual IMyNotificationService MyService {
    get { throw new NotImplementedException(); }
    }
    public virtual IMyNotificationService AnotherService {
    get { throw new NotImplementedException(); }
    }

    VB.NET

    Public Overridable ReadOnly Property MyService() As IMyNotificationService
    Get
    Throw New NotImplementedException()
    End Get
    End Property
    Public Overridable ReadOnly Property AnotherService() As IMyNotificationService
    Get
    Throw New NotImplementedException()
    End Get
    End Property

    您还可以使用 ServiceProperty 属性以其他名称显式标记服务属性。

    C#

    using DevExpress.Mvvm.DataAnnotations;
    //. . .
    [ServiceProperty]
    public virtual IMyNotificationService MyProvider {
    get { throw new NotImplementedException(); }
    }

    VB.NET

    Imports DevExpress.Mvvm.DataAnnotations
    '. . .
    
    Public Overridable ReadOnly Property MyProvider() As IMyNotificationService
    Get
    Throw New NotImplementedException()
    End Get
    End Property

    当框架覆盖服务属性时,它会生成相应的 GetService 扩展方法调用。ServiceProperty 属性允许您为此方法指定其他参数(例如,服务密钥)。

    C#

    [ServiceProperty(Key="Service1")]
    public virtual IMyNotificationService Service {
    get { throw new NotImplementedException(); }
    }
    [ServiceProperty(Key = "Service2")]
    public virtual IMyNotificationService AnotherService {
    get { throw new NotImplementedException(); }
    }

    VB.NET

    
    Public Overridable ReadOnly Property Service() As IMyNotificationService
    Get
    Throw New NotImplementedException()
    End Get
    End Property
    
    Public Overridable ReadOnly Property AnotherService() As IMyNotificationService
    Get
    Throw New NotImplementedException()
    End Get
    End Property

    DevExpress WinForm

    DevExpress WinForm 拥有 180 多个组件和 UI 库,可为 Windows Forms 平台创建有影响力的业务解决方案。DevExpress WinForms非常适合构建流畅、美观、易用的应用程序,无论是Office风格的界面,还是分析处理大量业务数据,都能轻松搞定!

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 构建MVVM应用程序时需要注意的所有MVVM框架惯例【一】

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论