大大提升了开发效率和可维护性

时间:2022-02-25 07:22:13

在这个项目中只有一个数据模型,那就是qq账号数据。那么qq账号数据具有两个属性,一个是qq号,一个是暗码。

mvvm架构中我们需要做的是“前后台疏散”,所以大部分数据都是需要用到“数据绑定Binding”。数据绑定之后我们可能需要做改削、删除、新增这些动态操纵,那就要用到INotifyPropertyChanged接口(用于通知客户端,凡是执行绑定的客户端,属性值已变动)。

数据绑定在开发中非每每用和实用,在这个项目中好比我需要删失一个错误的qq号,那么在我点击删除之后,界面的listview应该要把我删失的那条数据从列表中remove失,然后我们还要在“数据库”中将数据彻底删失,这样才完成了删除操纵。

如果不用数据绑定去写,我们需要做几个法式呢?

1,在操纵事件中获取到选中的数据;

2,将数据从“数据库”删除;

3,将数据从listview中移除。

一共需要3个法式。如果我们使用了数据绑定,,我们需要几个法式?

1,将选中数据从“数据调集中”移除,更新“数据库”,完成。

是不是超级快。在数据绑定中我们不需要在后台代码中直接操纵listview了,只需要操纵listview绑定的数据即可,大大提升了开发效率和可维护性。

下面继续我们的项目,要用INotifyPropertyChanged,就要实现这个接口;

1,在Models文件夹下新建一个类,定名为:MyINotifyPropertyChanged.cs:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace qqkeys.Models { public class MyINotifyPropertyChanged : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName]string propertyName = "") { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } }

2,新建QQ数据模型:在Models文件夹下新建一个类,定名为QQModel.cs(每个数据模型都要担任MyINotifyPropertyChanged)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace qqkeys.Models { public class QQModel : MyINotifyPropertyChanged { private int qq_; public int qq { get { return qq_; } set { qq_ = value; OnPropertyChanged(); } } private string password_; public string password { get { return password_; } set { password_ = value; OnPropertyChanged(); } } } }

可以看到在QQModel中两个属性的set要领都挪用了一个OnPropertyChanged();要领,就是我们第1步新建的MyINotifyPropertyChanged中的一个接口要领,这个要领就起到了卖力通知客户端属性已经变动的感化。如果不实现这个接口不挪用这个要领会产生什么呢?答案是我们操纵绑定的数据后数据是能告成操纵了,但是界面不会进行数据的更新,好比删失一个qq号,数据上是删除去了,但是界面上还是存在这个qq号。