C# 从其他窗口添加项时刷新ListView出现问题(ObservableCollection)

C# 从其他窗口添加项时刷新ListView出现问题(ObservableCollection),c#,wpf,listview,observablecollection,C#,Wpf,Listview,Observablecollection,从另一个窗口在我的ListView中添加项目时出现问题,该项目未添加到列表中。 我正在尝试将一个项目从window添加到Addanewbus添加到我的主窗口中的ListView中,当我添加它时,我希望主窗口自动刷新 在MainWindow.xaml.cs中使用ObservableCollection定义我的列表 public static List<Bus> buses = new List<Bus>(); public static ObservableCollecti

从另一个窗口在我的ListView中添加项目时出现问题,该项目未添加到列表中。 我正在尝试将一个项目从window添加到Addanewbus添加到我的主窗口中的ListView中,当我添加它时,我希望主窗口自动刷新

在MainWindow.xaml.cs中使用ObservableCollection定义我的列表

public static List<Bus> buses = new List<Bus>();
public static ObservableCollection<Bus> myCollection { get; set; } = new ObservableCollection<Bus>(buses);
在WindowToAddanewus.xaml.cs中添加新项目时

Bus b1 = new Bus(myLicenseNum, date);
MainWindow.myCollection.Add(b1);
我不知道我是否用得很好

如果你能帮助我,请!!
谢谢

您需要将
项目资源
设置为您的
myCollection
属性,而不是
总线

要添加一些上下文,
observateCollection
不会通知传递给构造函数的集合的更改,这只是在创建集合时在集合中放置一堆项的一种方法。但是,当其基础集合发生更改时(例如,
添加
删除
清除
等),它会通知更改。鉴于此,我认为您根本不需要
bus
属性,您只需使用
myCollection
属性即可

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

public MainWindow()
{
    InitializeComponent();
    myListView.ItemsSource = myCollection;
}
对一般方法的可能改进
为了更进一步,您可能希望完全避免使用
静态
属性,因为在这些部分周围肯定会有点混乱。我建议您在创建/显示
myCollection
属性时,将其传递给
窗口ToAddanewus
,或者最好还是让
窗口在关闭时返回一个
总线

您需要将
项资源设置为
myCollection
属性,而不是
总线

要添加一些上下文,
observateCollection
不会通知传递给构造函数的集合的更改,这只是在创建集合时在集合中放置一堆项的一种方法。但是,当其基础集合发生更改时(例如,
添加
删除
清除
等),它会通知更改。鉴于此,我认为您根本不需要
bus
属性,您只需使用
myCollection
属性即可

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

public MainWindow()
{
    InitializeComponent();
    myListView.ItemsSource = myCollection;
}
对一般方法的可能改进
为了更进一步,您可能希望完全避免使用
静态
属性,因为在这些部分周围肯定会有点混乱。我建议您在创建/显示
myCollection
属性时,将其传递给
WindowToAddanewus
,或者在关闭
WindowToAddanewus
类时,最好仍保留该
WindowToAddanewus
属性。

好的,谢谢!!但是我如何才能将ObservalCollection转换为type List,因为我有一个函数,它接收一个列表,用10条总线初始化我的列表,或者我必须执行一个新函数InitializeBus(observecollection myCollection)?@Elish您可能只需将函数中的类型更改为
IEnumerable
,而不是
List
,尽管在没有看到函数的情况下很难说清楚OK谢谢!!但是我如何才能将ObservalCollection转换为type List,因为我有一个函数,它接收一个列表,用10条总线初始化我的列表,或者我必须执行一个新函数InitializeBus(observecollection myCollection)?@Elish您可能只需将函数中的类型更改为
IEnumerable
,而不是
List
,尽管在没有看到函数的情况下很难确定这是对您的代码示例的一般建议,但是你应该考虑使用MvvmLight之类的东西并绑定到模型,而不是在代码隐藏中设置东西,从长远来看,这将使事情变得更容易。这是对你的代码示例的一般建议,但你应该考虑使用MvvmLight之类的东西并绑定到模型,而不是在代码隐藏中设置东西,从长远来看,这将使事情变得更容易。