WPF ComboBox раскрывающиеся (привязанные к данным) значения не меняются - PullRequest
1 голос
/ 09 апреля 2010

Я связываю ItemsSource из ComboBox с ObservableCollection<MyClass>. В коде я изменяю коллекцию (например, редактируем свойство MyClass.Name).

Проблема: изменение не отображается в раскрывающемся списке, если ComboBox, но когда я выбрал элемент из раскрывающегося списка, оно правильно отображается в поле выбранного элемента ComboBox.

Что происходит? :)

PS В MyClass реализован INotifyPropertyChanged

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Я подозреваю, что INotify ... не правильно реализован? Я только что проверил:

     l = new ObservableCollection<MyClass>();
     l.Add(new MyClass() { Name = "A" });
     l.Add(new MyClass() { Name = "B" });
     l.Add(new MyClass() { Name = "C" });
     cmb.ItemsSource = l;

, а затем, по нажатию кнопки:

     l[0].Name = "Robert";

работает просто отлично. Мой комбинированный список:

    <ComboBox x:Name="cmb" SelectedValuePath="Name" DisplayMemberPath="Name" />

и, наконец, мой класс:

 class MyClass : INotifyPropertyChanged
 {
    private string _name;
    public string Name
    {
       get
       {
          return _name;

       }
       set
       {
          string oldval = _name;
          _name = value;
          if (!string.Equals(oldval, _name))
          {
             OnPropertyChanged("Name");
          }
       }
    }
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name)
    {
       var ev = PropertyChanged;
       if (ev != null)
       {
          ev.Invoke(this, new PropertyChangedEventArgs(name));
       }
    }  
 }
0 голосов
/ 09 апреля 2010

Мне жаль, что это был даже вопрос здесь. Проблема заключалась в том, что я просто забыл установить Binding Path в DataTemplate, и он использовал метод ToString для отображения элементов. Это испортило привязку.

Так что помните - если вы переопределяете ToString, всегда проверяйте, что вы не используете его в привязке:)

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