2010-07-13 164 views
1

問題 - 用戶點擊「做某事」按鈕(視圖),視圖模型接收命令並將其傳遞給模型(函數調用)。一段時間過後,模型完成處理數據(異步)。模型如何通知viewmodel關於「需要更新」/「完成」? 什麼是最好的方法?在這種情況下,我如何從ViewModel中分離模型?MVVM簡單問題

回答

4

您可以在模型中實現一個普通的舊事件,該事件可以從ViewModel訂閱。

更新

在回答您的評論。

如果您使用多個線程,那麼您需要了解「Dispatcher」框架以確保來自非UI線程的調用已正確同步到UI線程中。這是WPF的一項要求。請參閱:

http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

+0

我該怎麼做? :)新學校在這裏! – 2010-07-13 19:41:28

+0

@ 0xDEAD BEEF除了訂閱自己沒有寫過的組件的事件外,知道如何實現自己的事件非常有用,例如http://msdn.microsoft.com/en-us/library/w369ty8x.aspx。對於初學者來說,事件可能是一個困難的概念 - 我事先對此表示歉意:) – 2010-07-13 19:45:39

+0

@@ 0xDEAD BEEF不確定這是否是實現事件的最佳示例,但是如果您有C#書籍,則應該涵蓋此主題。 – 2010-07-13 19:48:31

1

我認爲這樣做的正常方法是使用INotifyPropertyChanged接口。我不是100%確定它是如何工作的,因爲我對WPF還比較陌生,但通常情況下,只要屬性發生更改,就會觸發事件,傳入屬性的名稱並更新該屬性的綁定。

下面是一些示例代碼。然後你會綁定到IsSelected屬性(因爲我相信這應該是你的ViewModel)。

public class TestProperty : INotifyPropertyChanged 
{ 
     public Boolean IsSelected 
     { 
      get { return isSelected; } 
      set 
      { 
       isSelected = value; 
       this.NotifyPropertyChanged("IsSelected"); 
      } 
     } 
     private bool isSelected; 

     /// <summary> 
     /// Occurs when a property value changes. 
     /// </summary> 
     public event PropertyChangedEventHandler PropertyChanged; 

     /// <summary> 
     /// Notifies the property changed. 
     /// </summary> 
     /// <param name="propertyName">Name of the property.</param> 
     private void NotifyPropertyChanged(String propertyName) 
     { 
      this.VerifyPropertyName(propertyName); 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
}