gpc44 Ответов: 1

Inotifypropertychanged глобальное использование


Привет,
В WinForms приложение должно быть сохранено только в том случае, если пользователь что-то изменил.
Для этого я реализую INotifyPropertyChanged во всех классах сущностей.

Теперь я хочу знать глобально, прежде чем хранить, изменилось ли что-то в какой-либо области.
Каков наилучший метод?
спасибо
КОМПАНИЯ LG
Николь

public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }


Что я уже пробовал:

public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }

1 Ответов

Рейтинг:
0

Wendelius

Одним из способов может быть создание многоразового базового класса, который содержит поле или свойство для статуса.

Рассмотрим следующий пример

public class SomeBase {
      public event PropertyChangedEventHandler PropertyChanged;

      private bool _changed;

      public readonly List<string> ChangedProperties;

      public bool Changed {
         get {
            return this._changed;
         }
         set {
            if (this._changed != value) {
               this._changed = value;
               // Reset the list if not changed
               if (!this._changed) {
                  this.ChangedProperties.Clear();
               }
            }
         }
      }

      public SomeBase() {
         this.Changed = false;
         this.ChangedProperties = new List<string>();
      }

      public void NotifyPropertyChanged(string propertyName) {
         PropertyChangedEventHandler eventHandler = PropertyChanged;

         this.Changed = true;
         if (eventHandler != null) {
            eventHandler(this, new PropertyChangedEventArgs(propertyName));
            if (!this.ChangedProperties.Contains(propertyName)) {
               this.ChangedProperties.Add(propertyName);
            }
         }
      }
   }

   public class MyClass : SomeBase {

      private string customerNameValue;

      public string CustomerName {
         get {
            return this.customerNameValue;
         }

         set {
            if (value != this.customerNameValue) {
               this.customerNameValue = value;
               NotifyPropertyChanged("CustomerName");
            }
         }
      }
   }


Теперь, после извлечения данных, установите измененный статус в false, и после этого вы можете проверить статус на наличие изменений.


Wendelius

Немного изменил решение, чтобы отслеживать измененные свойства...