ListView与observablecollection的双向绑定不会自动更新
本文关键字:更新 绑定 observablecollection ListView | 更新日期: 2023-09-27 18:11:08
public ObservableCollection<App> Apps { get; set; }
public MainWindow()
{
Apps = LoadApps();
listview.ItemsSource = Apps;
}
public void AnotherMethod()
{
Apps = LoadApps();
}
它工作时分配给ItemsSource,但我需要的ListView被更新,每次应用程序的内容改变。
ObservableCollection只更新ListView项目时,项目的集合被更新。你可以这样写
public void AnotherMethod()
{
var apps = LoadApps();
Apps.Clear();
Apps.AddRange(apps);
}
或者将Apps定义为一个依赖属性并绑定到列表视图ItemSource:
public static readonly DependencyProperty AppsProperty =
DependencyProperty.Register("Apps", typeof (ObservableCollection<App>), typeof (YourClass), new PropertyMetadata(default(ObservableCollection<App>)));
public ObservableCollection<App> Apps
{
get { return (ObservableCollection<App>) GetValue(AppsProperty); }
set { SetValue(AppsProperty, value); }
}
public MainWindow()
{
Apps = LoadApps();
listview.SetBinding(ListView.ItemsSourceProperty, new Binding("Apps"){Source = this})
}
你说的"Apps content"是什么意思?如果用新集合替换整个引用,则需要在MainWindow
中实现INotifyPropertyChanged
。如果项目内部发生变化,并且您希望在ListView
中更新,则需要在App
中实现上述接口。
(注意第一种可能性:通常您不允许通过创建private readonly
字段来替换引用,显然公开它的公共属性将只有getter)