在WPF中,当绑定的ObservableCollection中的对象属性更改时,UI不会自动更新。这是因为ObservableCollection只能检测到集合本身的更改,而不能检测到集合中的对象属性更改。
要解决这个问题,可以使用INotifyPropertyChanged接口来通知UI属性的更改。下面是一个示例代码:
首先,定义一个自定义类,实现INotifyPropertyChanged接口:
public class Person : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged(nameof(Name));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
然后,在绑定的ObservableCollection中使用这个自定义类:
public ObservableCollection People { get; set; }
public void Initialize()
{
People = new ObservableCollection
{
new Person { Name = "Alice" },
new Person { Name = "Bob" },
new Person { Name = "Charlie" }
};
}
在XAML中,使用ListView或ItemsControl来显示这个ObservableCollection,并使用DataTemplate绑定属性:
现在,当ObservableCollection中的对象属性更改时,UI将自动更新。例如,可以使用以下代码更改第一个Person对象的Name属性:
People[0].Name = "David";
UI中对应的TextBlock将显示"David"。