c# - 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 中。
解决方案
需要实现接口的底层对象(即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));
}
}
}
推荐阅读
- logging - 是否可以使用 log4j2 Kafka appender 以 AVRO 格式发送消息
- python - 从 pytorch 1d 张量中过滤掉 np.nan 值
- javascript - 为什么我的 .catch() 函数没有在承诺中返回错误名称?
- java - 在 Docker 中运行 Selenium 测试时,连接被拒绝的 UnreachableBrowserException
- c# - 通过 XAML 实例化视图时 SimpleInjector.Container.Verify 中的 NullReferenceException
- c++ - 此 BTC 代码如何验证用户输入?
- excel - VBA转到范围内的下一个空白单元格
- apache-nifi - 如何在 NiFi 中查找特定进程组的数据量大小?
- python - 如何在屏幕上均匀地平铺 matplotlib 图形?
- html - 正确对齐在 bootsrap 导航栏中不起作用