ObservableCollection не обновляется, даже если реализован интерфейс INotifyProperty - PullRequest
5 голосов
/ 13 декабря 2010

У меня есть ObservableCollection, привязанный к списку

public ObservableCollection<InsertionVM> Insertions
{
    get
    {
        return _insertions;
    }
    set
    {
        _insertions = value;
        base.OnPropertyChanged("ChromosomeList");
    }
}

Его член InsertionVM реализует INotifyPropertyChanged.У него есть свойство, которое будет обновляться.

public bool IsChecked
{
    get
    {
        return _isChecked;
    }
    set 
    {
        _isChecked = value;
        base.OnPropertyChanged("IsChecked");
    }
}

Почему ObservableCollection не обновляется, даже если я реализую интерфейс INotifyPropertyChanged для каждого свойства?


Обновление:

Я попробовал ссылку, приведенную ниже, но «более чувствительная коллекция» обновляется только при удалении / добавлении объектов.

if (e.Action == NotifyCollectionChangedAction.Remove)
{
    foreach (InsertionVM item in e.NewItems)
    {
        //Removed items
        item.PropertyChanged -= EntityViewModelPropertyChanged;
    }
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
    foreach (InsertionVM item in e.NewItems)
    {
        //Added items
        item.PropertyChanged += EntityViewModelPropertyChanged;
    }
}

public void EntityViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    //Debugger does not reach here
}

Конструктор:

public ChromosomeVM(Chromosome _chr, string insertionFilePath)
{
    Chr = _chr;
    _insertions.CollectionChanged += ContentCollectionChanged;
}     

Ответы [ 4 ]

2 голосов
/ 13 декабря 2010

Это ваш код: (см. Также комментарий, сделанный мной)

public ObservableCollection<InsertionVM> Insertions // propertyName == Insertions
{
    get
    {
        return _insertions;
    }
    set
    {
        _insertions = value;
        base.OnPropertyChanged("ChromosomeList"); // What is ChromosomeList??
    }
}

Вы видите проблему сейчас?Измените ChromosomeList на Insertions.Надеюсь, что хотя бы какая-то проблема будет исправлена!

2 голосов
/ 13 декабря 2010

Всегда помните следующее:

ObservableCollection<T> только уведомляет, когда number of items (оно может оставаться прежним, когда один элемент добавлен, а другой удален, но вы получаете очко) в нем изменяется.

Если элемент в ObservableCollection<T> изменяется, коллекция не несет ответственности за распространение уведомлений об изменениях.

0 голосов
/ 13 декабря 2010

Обязательно поместите [Вставки] в путь привязки, и он будет работать

[Вставки] будут обновлены, только если вы измените ссылку следующим образом.Чтобы сделать ваш код более эффективным, добавьте проверку, если значение изменяется в наборе, например

public ObservableCollection<InsertionVM> Insertions
    {
        get
        {
            return _insertions;
        }
        set
        {
       if(_insertions != value)
           {
               _insertions = value;
               base.OnPropertyChanged("Insertions");
           }
        }
    }
0 голосов
/ 13 декабря 2010

Пожалуйста, смотрите ObservableCollection, не замечая, когда Item в нем изменяется (даже с INotifyPropertyChanged) - в основном вам также нужно перехватить событие CollectionChanged.

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