WPF 绑定相关

阅读: 评论:0

WPF 绑定相关

WPF 绑定相关

绑定的五种模式

1、 OneWay:从源的改变更新目标的属性
2、 TwoWay:源与目标相互改变
3、 OneTime:只根据源来设置目标,以后都不会改变
4、 OneWayToSource:目标的改变使源发生变化
5、 Default:可以单向亦可双向,是靠被指定的源或目标是否有get或set指定,所以绑定的话是需要选择上面4个中的一个模式进行绑定,根据所需来选择,不选则默认为Default

MVVM中的数据交互

在MVVM模式中,界面的目标数据和后台代码中的数据源一般需要进行相互绑定,即改变界面目标数据时数据源会发生变化,改变数据源时界面显示的目标数据会发生变化。前者的实现十分简单,只需要将后台数据属性添加上getter和setter,在前台xaml绑定相应的数据属性即可,当修改界面的目标数据时,监控到后台数据也发生了相应的变化。需要额外的效果可以参考上述五种绑定模式。而要使目标数据随着数据源的改动而刷新,除了直接更改界面目标数据外,还可以实现后台直接对数据源的修改直接更新到数据上,此时就需要借助一些其他方法达到目的。

  • 方法一:INotifyPropertyChanged接口
    是绑定最常用到也是最基本的接口方法。首先在需要用到的cs文件中添加System.ComponentModel命名空间,在需要实现数据绑定的类后实现INotifyPropertyChanged接口,在需要绑定的属性的setter,getter中添加PropertyChanged.Invoke方法即可,代码如下:
        public event PropertyChangedEventHandler PropertyChanged;private string title = "App";public string Title{get { return title; }set {title = value;if (this.PropertyChanged != null){this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Title"));}}}

还有另外一种写法,实现接口后添加NotifyPropertyChanged方法,在setter中触发该方法即可,代码如下:

        private string title = "App";public event PropertyChangedEventHandler PropertyChanged;public string Title{get { return title; }set {title = value;if (this.PropertyChanged != null){this.title = value;NotifyPropertyChanged("Title");}}}private void NotifyPropertyChanged(String info){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(info));}}
  • 方法二:NuGet中的PropertyChanged.fody包
    如果项目较复杂,需要绑定的数据源太多,那么实现INotifyPropertyChanged就显得十分复杂,需要重复很多次getter和setter,代码量巨大。此时可以用NuGet中的PropertyChanged.fody包,使得代码看起来十分简洁。首先在NuGet中下载Fody包,安装完成后在要用到的项目中cs项目中添加PropertyChanged命名空间,在需要绑定的类前添加AddINotifyPropertyChangedInterface特性(Atrribute),getter和setter无需修改
    代码如下:
[AddINotifyPropertyChangedInterface]public class MainWindowViewModel{public string Title { get; set; } = "App";//后续省略}
  • 方法三:Prism框架中的BindableBase
    在使用MVVM的Prism框架时,自动生成的view和viewmodel文件会一一对应,并且相应的viewmodel文件会继承BindableBase(存在 Prism.Mvvm命名空间中),这是框架内部已经封装好的类,该类已经实现了INotifyPropertyChanged接口,继承后无需做过多处理,添加需要绑定的数据源时可使用快捷代码段propp自动生成可绑定交互的数据源。代码如下:
       private string title = "App";public string Title{get { return title; }set {SetProperty(ref title ,value);}}

以上是目前我所用到的绑定的后台编辑方法,前台的xaml直接绑定后台数据即可,如果需要其他效果可以参考Binding的其他属性,例如Mode,NotifyOnTargetUpdated等等后续使用再详细描述

本文发布于:2024-01-31 20:05:19,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670272131034.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:绑定   WPF
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23