当我从另一个 window (ObservableCollection) 添加项目时刷新 ListView 时出现问题

Problem with refreshing a ListView when I add an item from an other window (ObservableCollection)

我在从另一个 windows 向我的 ListView 添加项目时遇到问题,它没有添加到列表中。 我正在尝试从 window WindowTodAddANewBus 向我的 MainWindow 中的 ListView 添加一个项目,当我添加它时,我希望 MainWindow 自动刷新。

使用 ObservableCollection

在 MainWindow.xaml.cs 中定义我的列表
public static List<Bus> buses = new List<Bus>();
public static ObservableCollection<Bus> myCollection { get; set; } = new ObservableCollection<Bus>(buses);

在构造函数中:

public MainWindow()
       {
           InitializeComponent();
           myListView.ItemsSource = buses;
       }

当我在 WindowToAddANewBus.xaml.cs

中添加新项目时
Bus b1 = new Bus(myLicenseNum, date);
MainWindow.myCollection.Add(b1);

不知道我用好ObservableCollection..

如果你能帮助我请! 谢谢

您需要将 ItemsSource 设置为 myCollection 属性 而不是 buses

要添加一些上下文,ObservableCollection 不会 通知您传递给构造函数的集合的更改,这只是一种放置大量项目的方法创建它时在集合中。但是,当它的底层集合发生变化时(例如 AddRemoveClear 等),它确实会通知更改。鉴于此,我认为您根本不需要 buses 属性,您只需使用 myCollection 属性.

基本上将构造函数更改为:

public MainWindow()
{
    InitializeComponent();
    myListView.ItemsSource = myCollection;
}

一般方法的可能改进

为了更进一步,您可能希望完全避免使用 static 属性,因为围绕这些部分的事情肯定会变得有点混乱。我建议考虑在 create/show 时将 myCollection 属性 传递给 WindowToAddANewBus,或者最好仍然保留 WindowToAddANewBus class return一个Bus关闭的时候。