2011-07-08 37 views
0

我正在更新數據庫綁定到我的視圖的項目已更改。我注意到在linq類中觸發了PropertyChanged事件,但是如何告訴我的視圖模型有什麼變化? 我使用Linq類作爲我的模型,所以我不必再創建它,這是不好的做法?我知道我可以在我的Linq類中創建一個新的屬性true或false,並從我的viewmodel中使用該屬性,但這不會太有效,因爲每次我需要從SQL更新類時都必須重做。Linq數據綁定更新收藏中的項目已更改

回答

0
  • View和Model之間的分離是ViewModel的關鍵障礙之一。否則該模型將受到視圖特定屬性和數據格式的污染。
  • ViewModel應該將Model包裝爲屬性並將它們展示給視圖,並且由於視圖修改了包裝的ViewModel屬性,它可以依次調用特定於模型的方法。

因此,不要將您的linq類直接綁定到您的視圖,而是通過ViewModel中的屬性暴露它們。就個人收集物品通知而言,您可以使用something

+0

嗯......什麼?這是如何回答問題的? –

+0

對,我有點理解mvvm的概念,我不確定其他人是否一般使用生成的linq類作爲模型,但我認爲其他人會這樣做。如果你沒有,那麼你將不得不建立一個幾乎完全相同的課程。那麼,通知我的viewModel一個屬性在我的一個集合中被更改的最好方法是什麼? –

+0

你有一個模型集合需要綁定來查看,那麼你應該在你的viewmodel中公開一個ObservableCollection 屬性,這將只通知添加/刪除。如果你在每個項目的合適的地方插手,你應該讀更多這個http://stackoverflow.com/questions/269073/observablecollection-that-also-monitors-changes-on-the-elements-in-collection – anivas

0

只是爲了讓其他人知道我爲這種情況做了些什麼。我確實嘗試了anivas發佈的鏈接,但它的工作原理並不像我爲解決方案提出的那樣簡單。 我將選定的項目綁定到我的modelView上的一個屬性,因爲它是唯一可以由用戶更改的唯一項目。在我的屬性的設置器中,我爲notifyProperty的處理程序進行了更改。請參閱下面的代碼 private CustAccountLocation _selectedStore;

public CustAccountLocation SelectedStore 
    { 
     get { return _selectedStore; } 
     set { 

      _selectedStore = value; 
      SelectedStore.PropertyChanged += new PropertyChangedEventHandler(SelectedStore_PropertyChanged); 
      NotifyPropertyChanged("SelectedStore"); 
     } 
    } 

    void SelectedStore_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     StoreNeedsSave = true; 
    } 
相關問題