WPF Binding - ListBox Обновление выбранного элемента не отражается в текстовом блоке, который привязывается к нему - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть поле со списком, и его свойство datacontext присвоено ObservableCollection.

<ComboBox 
    Name="CB" 
    ItemsSource="{Binding}" 
    DisplayMemberPath="Name" 
    IsSynchronizedWithCurrentItem="True">
</ComboBox>
<TextBlock 
    Name="TB" 
    Text="{Binding ElementName=CB,Path=SelectedItem.Name,UpdateSourceTrigger=PropertyChanged}"
    ></TextBlock>

C #

class Person
{
    public string Name { get; set; }
}

ObservableCollection<Person> people = new ObservableCollection<Person>( new List<Person>()
{
    new Person(){Name="A"},
    new Person(){Name="B"},
    new Person(){Name="C"},
    new Person(){Name="D"},
});

people[0].Name = "Z"; // When button clicked, i execute this

У меня также есть кнопка, при нажатии которой имя первого сотрудника обновляется на другое имя.

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

Что я должен сделать, чтобы достичь того, чего я хочу?Я думал, когда ObservableCollection, что combobox связан с изменениями, это будет отражено в пользовательском интерфейсе.

1 Ответ

0 голосов
/ 24 апреля 2018

Базовый объект (т. Е. Person) ObservableCollection должен реализовать интерфейс INotifyPropertyChanged.

    class Person : INotifyPropertyChanged
    {
        private string name;
        public string Name 
        { 
          get
          {
             return name;
          } 
          set
          {
              if(value != name)
              {
                  name = value;
                  RaisePropertyChange("Name");
              }
          }
        }

          public event PropertyChangedEventHandler PropertyChanged;

          public void RaisePropertyChange(string propertyname) 
          {  
             if (PropertyChanged != null) 
             {  
                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));  
             }  
          }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...