2010-10-19 142 views
1

我有一個只讀屬性名稱是DBName,它是從託管包裝獲得數據庫名稱的公開屬性。根據連接到WPF應用程序的數據庫,DBName可能會有所不同。這個屬性getter和setter也駐留在託管的.NET包裝器中。我在我的WPF項目中使用此(DBName)屬性。使用WPF中的依賴項屬性

我想通過這個(DBName).NET屬性創建一個依賴屬性,只要這個DBName發生變化,這個屬性將被通知。我想在WPF應用程序的狀態欄上顯示DBName

我能做到這一點?

回答

0

您需要實現INotifyPropertyChanged在您的包裝,並呼籲PropertyChanged("DBName")每次DBName改變。

更新

我認爲這個問題可以通過強制執行一個簡單的規則來解決:總是通過屬性設置。如果你強制執行該操作,那麼其他程序員不會忘記致電PropertyChanged("DBName")

public class DBWrapper : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler Propertychanged; 

    private string dbName; 

    public string DBName 
    { 
     get { return dbName; } 

     private set 
     { 
      dbName = value; 
      if(PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("DBName")); 
      } 
     } 
    } 

    public void SomeMethodThatChangesDBName() 
    { 
     DBName = "SomethingNew"; 
    } 
} 

使用這種方法意味着事件被稱爲每次數據庫名更新時的代碼。

+0

有沒有其他的解決方法。通常我在我的WPF應用程序中調用Connect(string dbname)方法,該方法調用.NET託管包裝的連接方法。我可以在這個方法中完成我的要求,但假設有任何新方法出現,我必須確保程序員調用了屬性changed(「DBName」),否則代碼可能會中斷。 – 2010-10-19 12:26:14

+0

那麼,確保這個屬性的設置器(可以是私有的)始終引發PropertyChanged事件。並確保更新此屬性的唯一方法是通過setter(不要直接更新後臺字段)。 – 2010-10-19 13:06:16