2012-07-03 67 views
1

我從MVVM開始。MVVM - PropertyChangedEventHandler

我的應用程序使用這個「模式(PM模式 - 讓我們不要在這裏討論這個:))」並且工作正常;該項目非常簡單,對於初學者來說很容易就可以掌握!如果只是它...... :)

有一件事令我費解,這可能與MVVM本身無關; PropertyChangedEventHandler。

我正在逐行瀏覽我的代碼,可以看到調用(下面的代碼),但我不知道爲什麼我調用這個處理程序或它正在做什麼!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Windows.Input; 

namespace drMVVM.Model 
{ 
    public class TextContent : INotifyPropertyChanged 
    { 
     private string text; 
     public string Text 
     { 
      get { return text; } 
      set 
      { 
       if (text != value) 
       { 
        text = value; 
        OnPropertyChanged("Text"); 
       } 
      } 
     } 

     private void OnPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 
    } 
} 

我也有相似的代碼佈局視圖模型我,但不是設置屬性,我只是創建對象的實例,並施加任何額外的邏輯。

PropertyChangedEventArgs是否僅用於更新模型的某些屬性已更改?如果是這樣,爲什麼它在模型類中實現,而不僅僅是ModelView?是否因爲它可以本能地知道是僅僅是傾聽一個改變還是提供一個發生改變的通知的細節?如果它是一個通知(因此我假設接口的名稱),那麼我在Model類中通知了什麼?

回答

2

INotifyPropertyChanged是必需的,只要你想通知某人有關你的屬性的變化。因此,如果您的ViewModel需要通知有關更改的視圖,以便視圖更新其數據綁定,那麼ViewModel需要實現它並在每次更改屬性時引發事件。

類似的,如果您的模型具有可以更改的屬性並希望得到通知,那麼也可以在模型中實現它。

這不是真的需要的東西,除非有自動影響它;一個是WPF中的數據綁定,它需要一個提示,所以它知道它必須更新。

+0

Ahhhh ...所以,當我的用戶界面發生變化時(它綁定到虛擬機,虛擬機會通知模型,模型會更新,然後重新通知虛擬機可以通知視圖嗎?虛擬機=查看模型) – Dave

+0

不,它從'INotifyPropertyChanged'轉到綁定的任何東西,當UI改變時,它直接更新它綁定的值,但是當數據改變時,事件通知UI更新它的顯示值。類似的,當虛擬機綁定到模型,並且模型更新它的值時,它會通知虛擬機 – poke

+0

hmmm ...現在我又回到原點了:)我的用戶界面綁定到虛擬機中的一個對象。 VM創建我的模型的一個實例。 VM和Model都使用接口INotifyProperyChanged。所以,當用戶界面發生變化時,它實際上會更新模型(通過虛擬機 - 它創建了對象實例)。然後觸發(引發事件)PropertyChanged事件,它更新VM,然後觸發它的PropertyChanged事件,然後更新UI(視圖)? – Dave