Wpf - 在子窗口中添加新项目时,如何在父窗口中更新或通知ObservableCollection

时间:2015-12-04 09:48:47

标签: c# wpf observablecollection inotifypropertychanged

当我在子窗口中添加新产品时,我想更新n通知父窗口中的现有产品列表。我已将Observable集合订阅到NotifyPropertyChanged但仍然没有使用新产品更新列表。我需要再次从数据库中获取整个产品列表以刷新它。

private ObservableCollection<Product>   _productsList;
public ObservableCollection<Product> ProductsList
{
       get {return _productsList ;}
        private set {
             _productsList = value;
         NotifyPropertyChanged("ProductsList");
      }
}


 public void AddNewProduct()
 {
        Window_NewProduct newProduct = new Window_NewProduct();
        newProduct.ShowDialog();
 }

请帮帮我。谢谢。

2 个答案:

答案 0 :(得分:0)

更换NotifyPropertyChanged后,您的ObservableCollection会被触发。您需要注册CollectionChanged财产的ProductsList个事件。请参阅:MSDN

答案 1 :(得分:0)

添加新产品的逻辑在哪里做数据库? 在Window_NewProduct?

如果是这样,产品将添加到数据库,但不会添加到ProductsList。这里的问题是如何刷新ProductsList,但是要正确地将新项添加到此列表中。您可以尝试从Window_NewProduct返回新添加的产品并将其添加到ProductsList。因为它是ObservableCollection,所有刷新应该自动执行。

这里有一些伪代码:

public void AddNewProduct()
{
    Window_NewProduct newProductWindow = new Window_NewProduct();
    if(newProductWindow.ShowDialog() == OK)
    {
         ProductsList.Add(newProductWindow.NewlyAddedProduct);
    }

}

更新1:

除非我们不知道Window_NewProduct的外观,否则很难给出解决方案。 但是,我可以假设你有类似的方法:

void SaveProduct()
{
  var product = new Product();
  Database.Save(product);
}

你可以这样做:

public Product NewlyAddedProduct{get;private set;} //public property of Window

public void SaveProduct()
{
  var product = new Product();
  Database.Save(product);
  NewlyAddedProduct = product;
}