如您在WPF
應用程序中所瞭解的,如果您想要將某些特定類的屬性綁定到控件的屬性,則必須實現該類的接口INotifyPropertyChanged
。如何將普通類動態地轉換爲c#
現在考慮我們有很多正常的類沒有實現INotifyPropertyChanged
。他們是非常簡單的類如下面的例子:
public class User : ModelBase
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
// ...
}
例如我想將UserName
綁定到一個TextBox
,所以我應該寫另一個新User
類,它實現INotifyPropertyChanged
這樣的:
public class User : INotifyPropertyChanged
{
public string Password { get {return _Password}}
set {_Password=value;OnPropertyChanged("Password");}
// ... Id and UserName properties are implemented like Password too.
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
// ...
}
現在我的問題是,那裏是否存在或者你知道任何機制或技巧來簡化?
認爲我們有超過100個模型,也許他們會改變。
我在想一個辦法,像使用普通類做(編輯):
public class BindableClass<NormalClass> { ...adding ability to bind instructions using reflection... }
NormalClass NormalInstance = new NormalClass();
// simple class, does not implemented INotifyPropertyChanged
// so it doesn't support binding.
BindableClass<NormalClass> BindableInstance = new BindableClass<NormalClass>();
// Implemented INotifyPropertyChanged
// so it supports binding.
當然,我不知道這是好辦法還是不行!這只是一個想法來澄清我的問題。
請不要告訴我,沒有辦法或不可能!有數百個模型!
謝謝。
阿里,會不會使用MVVM和引入視圖模型層是一個更好的解決方案?您確定要在模型上使用這種(以UI爲中心)更改通知功能嗎? – Alan
你不需要實現INotifyPropertyChanged來進行綁定。您只需要將INotifyPropertyChanged通知給用戶界面以通知更改。 – Paparazzi
@Alan,我最後的選擇是它。但我會避免重複。考慮到ViewModels實現,我們應該再次定義模型類,並附帶一些額外的指令,例如INotifyPropertyChanged。 –