2015-12-04 38 views
0

當我在子窗口中添加新產品時,我想更新n在父窗口中通知我現有的產品列表。我訂閱了可觀察集合到NotifyPropertyChanged,但仍然不會使用新產品更新列表。我需要再次從數據庫中提取整個產品列表以刷新它。Wpf - 在子窗口中添加新項目時,如何在父窗口中更新或通知ObservableCollection

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(); 
} 

請幫助我。預先感謝。

+0

你只提高'NotifyPropertyChanged'when整個'ProductsList'屬性發生變化,而不是當您向該列表添加或刪除元素時。所以我認爲你需要爲'_productsList.CollectionChagned'事件註冊一個事件處理程序,並從該事件處理程序調用NotifyPropertyChanged'。但是我對wpf知道如何爲集合調用NotifyPropertyChanged來說並不是那麼有經驗,所以我不會將其作爲答案。 –

+0

訂閱'ObservableCollection'的'CollectionChanged'事件 – user1672994

+0

可以請你幫我介紹一下關於CollectionChanged實現的代碼 – user5552042

回答

0

當您更換ObservableCollection時,您的NotifyPropertyChanged會被觸發。您需要註冊的ProductsList屬性的CollectionChanged事件。參見:MSDN

0

添加新產品的邏輯是DB嗎? 在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; 
} 
+0

AddNewProduct函數在父窗口中,並且添加產品到db的邏輯在子窗口中,例如Window_NewProduct 。在子窗口中將新產品添加到數據庫後。我希望父窗口中的產品列表獲得新項目的更新。 – user5552042

+0

我沒有得到你剛纔提到的NewlyAddedProduct東西 – user5552042

+0

請看我的更新。 – GrzegorzM

相關問題