Распространение изменений в модели для просмотра в Silverlight

в моем приложении Silverlight 4 у меня есть ObservableCollection, данные которого я привязываю к двум разным спискам. Элементы списка, показывающие содержимое MyClass-Object. Когда я добавляю элемент в ObservableCollection, новый элемент правильно отображается в обоих списках.

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

Любые идеи, как достичь: содержимое другого списка должно обновляться автоматически, когда я обновляю контент в одном списке.

Заранее спасибо,
Фрэнк


person Aaginor    schedule 07.07.2010    source источник


Ответы (2)


Чтобы расширить то, что сказал Люк, ваш класс должен реализовать INotifyPropertyChanged, а ваши свойства должны генерировать событие PropertyChanged в своих установщиках.

public class MyClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged; // This may be named wrong

    private string _myString = null;

    public string MyString
    {
        get { return _myString; }
        set
        {
            if(value == _myString)
                return;
            _myString = value;
            var eh = PropertyChanged;
            if(eh != null)
                eh(this, new PropertyChangedEventArgs("MyString"));
        }
    }
}

Свойство MyString уведомит пользовательский интерфейс об изменении, что вызовет привязку к обновлению.

person Stephan    schedule 07.07.2010
comment
спасибо за код! Одна из ошибок заключается в том, что вызов события должен выглядеть так: PropertyChanged (this, new PropertyChangedEventArgs (Name)); - person Aaginor; 09.07.2010
comment
Я знал, что это неправильно, но не мог припомнить точный синтаксис. Спасибо за исправление. - person Stephan; 09.07.2010

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

person luke    schedule 07.07.2010