INotifychanged接口的用途

时间:2016-10-01 01:31:06

标签: c# wpf mvvm inotifypropertychanged

我是编程新手。尝试使用本教程http://social.technet.microsoft.com/wiki/contents/articles/13536.easy-mvvm-examples-in-extreme-detail.aspx

了解MVVM的基本概念

我删除了界面" :INotifypropertychanged"从这段代码中删除(删除这些单词)。仍然这个程序运行并按预期运行。那么他在这里改变INotifyProperty的目的是什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;

namespace MvvmExample.ViewModel
{
    class ViewModelBase : INotifyPropertyChanged
    {
        //basic ViewModelBase
        internal void RaisePropertyChanged(string prop)
        {
            if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
        }
        public event PropertyChangedEventHandler PropertyChanged;

        //Extra Stuff, shows why a base ViewModel is useful
        bool? _CloseWindowFlag;
        public bool? CloseWindowFlag
        {
            get { return _CloseWindowFlag; }
            set
            {
                _CloseWindowFlag = value;
                RaisePropertyChanged("CloseWindowFlag");
            }
        }

        public virtual void CloseWindow(bool? result = true)
        {
            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
            {
                CloseWindowFlag = CloseWindowFlag == null 
                    ? true 
                    : !CloseWindowFlag;
            }));
        }
    }
}

1 个答案:

答案 0 :(得分:3)

INotifyPropertyChanged的主要职责是让视图知道绑定属性正在被更改。因此视图将自动更新。

要了解其工作原理,请将文本框的text属性绑定到视图模型中的字符串属性。单击按钮更改字符串。尝试使用和不使用INotifyPropertyChanged。如果没有INotifyPropertyChanged,则按钮单击时文本框文本不会更改。

INotifyPropertyChanged还可用于让其他视图模型监听当前视图模型的属性被更改。

希望你明白这一点。