WPF数据绑定的意义是什么?实现INotifyPropertyChange与手动GUI更新



我最近在WPF中做了一个非常简单的应用程序,它只是从几个文本框中读取数据并更新SQL Server数据库中的记录。我还设置了后退和前进按钮,以允许用户滚动可用的记录。每次用户单击应用程序上的Next时,UI都会通过我称为updatecontrol()的方法更新新记录的值,该方法如下:

private void updateControls()
    {
        IQueryable<Comment> query = from t in container.Comment
                                    where t.Id == browseIndex
                                    select t;
        if (query.Count<Comment>() > 0)
        {
            currentComment = query.First<Comment>();
            txtID.Text = currentThought.Id.ToString();
            txtComment.Text = currentComment.thought;
            txtDate.DisplayDate = currentComment.date;
            txtDate.Text = currentComment.date.ToString();
        }
    }

这很简单,而且效果很好。但我最近发现了数据绑定的世界,在那里你可以消除所有手动更新控件的样板代码,并让它们在模型更改时自行更新。

经过多次实验和阅读各种教程后,我发现,要使其工作,我的数据对象必须实现INotifyPropertyChanged接口,这意味着需要在我希望在UI上更新的属性上使用显式setter,如下所示:

public class Comment: INotifyPropertyChanged {
   private string comment;
   public event PropertyChangedEventHandler PropertyChanged;
   public string Comment { get { return this.comment;}
   set {
      this.comment = value;
      NotifyPropertyChanged("Comment");
   }
   public void NotifyPropertyChanged(string propName)
   {
      if (this.PropertyChanged != null ) this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
   }
}

这比简单地用我想要的数据手动更新我的UI要多得多的代码。另外,由于这个类是实体模型的一部分,INotifyPropertyChanged接口必须在模型类之外的一个类中实现,因为模型类在更新模型时重新生成。这就引出了我的问题:当手动更新UI要简单得多的时候,我为什么要在实际应用程序中使用数据绑定呢?还是有别的办法,我看不出来?

MVVM模式将GUI逻辑与核心逻辑分离。

  • 你可以为几个完全不同的控件拥有相同的模型,另一种方式是一个复杂的控件利用几个完全不同的模型(ViewModel只是胶水)。
  • 如果你在一个团队中工作,你可能有一个人负责GUI部分,另一个人专门负责数据库。
  • 数据库(模型)不再被显示数据的方式所奴役,只要ViewModel通知其更改,就由视图决定是否捕获它(通过简单的绑定)
  • 当你使用数据模板时,一切都会变得更有意义,因为它将非常容易渲染复杂的

这个模式很棒的原因有很多,网上有很多文章

最新更新