Отслеживание только тех элементов в коллекции observableCollection, которые изменились. Это возможно? - PullRequest
1 голос
/ 12 июля 2010

У меня есть сетка данных, связанная с observableCollection of Employees. Пользователю разрешено выполнять редактирование строк, дважды щелкнув datagridRow.При связывании рассматриваемого свойства я также использую UpdateSourceTrigger.

Когда я нажимаю кнопку «Сохранить», в моем MVVM запускается команда saveCommand, и я хочу создать список только тех сотрудников, у которых было изменено свойство.

Все мои ViewModels реализуют INotifyPropertyChanged.

Несмотря на большое количество ссылок в Google, я не могу найти пример, который поможет вам или объяснить, как отслеживать элементы, которые изменились в наблюдаемой коллекции.

Вы можете помочь?

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Создайте базовый класс для вашего Сотрудника, например, EntityBase и enum, описывающий его состояния:

    public enum EntityState
    {
        NotChanged,
        Changed,
        Added,
        Deleted
    }

    public abstract class EntityBase : INotifyPropertyChanging, INotifyPropertyChanged
    {
        public event PropertyChangingEventHandler PropertyChanging;
        public event PropertyChangedEventHandler PropertyChanged;

        private EntityState state = EntityState.NotChanged;

        public EntityState State
        {
            get { return state; }
            set { state = value; }
        }

        public EntityBase()
        {
            state = EntityState.NotChanged;
        }

        protected virtual void SendPropertyChanging(string propertyName)
        {
            if ((this.PropertyChanging != null))
            {
                this.PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
            }
        }
        protected virtual void SendPropertyChanged(string propertyName)
        {
            if ((this.PropertyChanged != null))
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    }

Когда один из ваших сотрудников в коллекции изменился - пометьте его с помощью EntityState.Changed, а затем вы можете запроситьтолько измененные объекты из коллекции и обрабатывать их, как вы хотите.

0 голосов
/ 12 июля 2010

Я не знаю ни одного встроенного способа делать то, что вы хотите.

В прошлом я реализовал логическое свойство IsDirty для объектов в коллекции. Затем установите для свойства IsDirty значение true каждый раз, когда вы вызываете PropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...