How to write a ViewModelBase in MVVM

前端 未结 5 728
孤街浪徒
孤街浪徒 2020-12-02 07:32

I\'m pretty new in WPF programming environment. I\'m trying to write a program out using MVVM design pattern.

I\'ve did some studies and read up some articles relate

5条回答
  •  醉酒成梦
    2020-12-02 07:47

    The below class can be used as a ViewModelBase in WPF projects:

    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        /// 
        /// Multicast event for property change notifications.
        /// 
        public event PropertyChangedEventHandler PropertyChanged;
    
        /// 
        /// Checks if a property already matches a desired value.  Sets the property and
        /// notifies listeners only when necessary.
        /// 
        /// Type of the property.
        /// Reference to a property with both getter and setter.
        /// Desired value for the property.
        /// Name of the property used to notify listeners.This
        /// value is optional and can be provided automatically when invoked from compilers that
        /// support CallerMemberName.
        /// True if the value was changed, false if the existing value matched the
        /// desired value.
        protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
        {
            if (object.Equals(storage, value)) return false;
            storage = value;
            // Log.DebugFormat("{0}.{1} = {2}", this.GetType().Name, propertyName, storage);
            this.OnPropertyChanged(propertyName);
            return true;
        }
    
        /// 
        /// Notifies listeners that a property value has changed.
        /// 
        /// Name of the property used to notify listeners.  This
        /// value is optional and can be provided automatically when invoked from compilers
        /// that support .
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            var eventHandler = this.PropertyChanged;
            if (eventHandler != null)
                eventHandler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    

    And an example of ViewModel class is:

    public class MyViewModel : ViewModelBase
    {
        private int myProperty;
        public int MyProperty
        {
            get { return myProperty; }
            set { SetProperty(ref myProperty, value);
        }
    }
    

提交回复
热议问题