首页 > 解决方案 > WPF 绑定 - 列表框选定项更新未反映在绑定到它的文本块中

问题描述

我有一个组合框,它的 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

单击时,我还有一个按钮将第一个员工的姓名更新为其他名称。

当第一个员工是选定的员工时,即使基础名称更改,我也单击了按钮,直到我更改所选项目并重新选择第一个员工,它才会反映在 UI 中。

我应该怎么做才能实现我想要的?我以为当组合框绑定的 ObservableCollection 发生变化时,它会反映在 ui 中。

标签: c#wpfdata-binding

解决方案


需要实现接口的底层对象(即Person) 。ObservableCollectionINotifyPropertyChanged

    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));  
             }  
          }
    }

推荐阅读