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被更新,每次应用程序的内容改变。

ListView与observablecollection的双向绑定不会自动更新

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)