WPF - OnPropertyChanged для свойства в коллекции - PullRequest
4 голосов
/ 05 июня 2009

В модели представления у меня есть коллекция элементов типа "ClassA", которая называется "MyCollection". ClassA имеет свойство с именем «IsEnabled».

class MyViewModel 
{
    List<ClassA> MyCollection { get; set; }

    class ClassA { public bool IsEnabled { get; set; } }
}

У моего представления есть сетка данных, которая привязывается к MyCollection. В каждой строке есть кнопка, атрибут которой «IsEnabled» связан со свойством IsEnabled класса ClassA.

Когда условия в модели представления изменяются так, что один конкретный элемент в списке MyCollction должен быть отключен, я устанавливаю для свойства IsEnabled значение false:

MyCollection[2].IsEnabled = false;

Теперь я хочу уведомить View об этом изменении с помощью события OnPropertyChanged, но я не знаю, как ссылаться на определенный элемент в коллекции.

OnPropertyChanged("MyCollection");
OnPropertyChanged("MyCollection[2].IsEnabled");

оба не работают.

Как мне уведомить View об этом изменении? Спасибо!

Ответы [ 2 ]

12 голосов
/ 05 июня 2009

ClassA необходимо реализовать INotifyPropertyChanged:

class ClassA : INotifyPropertyChanged
{
    private bool _isEnabled;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            if (value != _isEnabled)
            {
                _isEnabled = value;
                OnPropertyChanged("IsEnabled");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

РЕДАКТИРОВАТЬ: и использовать ObservableCollection, как сказал Скотт

EDIT2: сделана активизация вызова события PropertyChanged

6 голосов
/ 05 июня 2009

Вместо использования списка, попробуйте использовать ObservableCollection. Кроме того, измените ваш ClassA так, чтобы он реализовывал INotifyPropertyChanged, особенно для свойства IsEnabled. Наконец, измените ваш класс MyViewModel, чтобы он также реализовывал INotifyPropertyChanged, особенно для свойства MyCollection.

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