当我从另一个 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
不会 通知您传递给构造函数的集合的更改,这只是一种放置大量项目的方法创建它时在集合中。但是,当它的底层集合发生变化时(例如 Add
、Remove
、Clear
等),它确实会通知更改。鉴于此,我认为您根本不需要 buses
属性,您只需使用 myCollection
属性.
基本上将构造函数更改为:
public MainWindow()
{
InitializeComponent();
myListView.ItemsSource = myCollection;
}
一般方法的可能改进
为了更进一步,您可能希望完全避免使用 static
属性,因为围绕这些部分的事情肯定会变得有点混乱。我建议考虑在 create/show 时将 myCollection
属性 传递给 WindowToAddANewBus
,或者最好仍然保留 WindowToAddANewBus
class return一个Bus
关闭的时候。
我在从另一个 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
不会 通知您传递给构造函数的集合的更改,这只是一种放置大量项目的方法创建它时在集合中。但是,当它的底层集合发生变化时(例如 Add
、Remove
、Clear
等),它确实会通知更改。鉴于此,我认为您根本不需要 buses
属性,您只需使用 myCollection
属性.
基本上将构造函数更改为:
public MainWindow()
{
InitializeComponent();
myListView.ItemsSource = myCollection;
}
一般方法的可能改进
为了更进一步,您可能希望完全避免使用 static
属性,因为围绕这些部分的事情肯定会变得有点混乱。我建议考虑在 create/show 时将 myCollection
属性 传递给 WindowToAddANewBus
,或者最好仍然保留 WindowToAddANewBus
class return一个Bus
关闭的时候。