Silverlight Binding - привязывает, когда элемент добавлен, но не получает обновлений - PullRequest
1 голос
/ 01 апреля 2010

Я в недоумении, почему это не работает, учитывая, что я получил его из рабочего кода, просто добавил новый уровень кода, но вот что у меня есть. По сути, когда я связываю ViewModel со списком, привязка срабатывает, когда элементы добавляются в коллекцию. Однако, если происходит обновление элемента, который связан, он не обновляется. По сути, у меня есть ObservableCollection, которая содержит пользовательский класс со строковым значением. Когда это строковое значение обновляется, мне нужно обновить список.

Прямо сейчас, когда я отлаживаю, элемент списка обновляется правильно, но пользовательский интерфейс не отражает изменения. Если я установлю привязанный элемент к переменной-члену и обнулю его, то верну его в нужную коллекцию, это будет работать, но не желаемое поведение.

Вот макет кода, надеюсь, кто-нибудь подскажет, где я не прав. Кроме того, я попытался реализовать INofityPropertyChanged на каждом уровне в коде ниже.

public class Class1
{
     public string ItemName;
}

public class Class2
{
     private Class2 _items;

     private Class2() //Singleton
     {
          _items = new ObservableCollection<Class1>();
     }

     public ObservableCollection<Class1> Items
     {
          get { return _items; }
          internal set 
          { 
               _items = value;
          }
     }
}

public class Class3
{

     private Class2 _Class2Instnace;

     private Class3()
     {
          _Class2Instnace = Class2.Instance;
     }

     public ObservableCollection<Class1> Items2
     {
          get {return _Class2Instnace.Items; }
     }
}

public class MyViewModel : INofityPropertyChanged
{
     private Class3 _myClass3;

     private MyViewModel()
     {
          _myClass3 = new Class3();
     }

     private BindingItems
     {
          get { return _myClass3.Items2; }  // Binds when adding items but not when a Class1.ItemName gets updated.
     }
}

1 Ответ

2 голосов
/ 01 апреля 2010

Ответ на ваш вопрос заключается в том, что Class1 необходимо реализовать INotifyPropertyChanged.

public class Class1 : INotifyPropertyChanged
{
    private string _ItemName;
    public string ItemName
    {
       get { return _ItemName; }
       set
       {
         _ItemName = value;
         NotifyPropertyChanged("ItemName");
       }
    }

    private void NotifyPropertyChanged(string name)
    {
      if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs(name));
    }

    public event PropertyChangedEventHandler PropertyChanged;

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