2017-08-03 224 views
0

我目前正在與MVVM一起工作,因爲對模型的更改要求在WPF中觸發INotifyPropertyChangedOnPropertyChanged。我尋求簡短而好的解決方案。我的研究表明,自動財產不能自行觸發OnPropertyChanged。因此我需要爲每個Property添加其他字段。 我目前是ChangeProperty-了Methode在我的抽象類,這有助於我很多:MVVM公共財產的做法

public abstract class PropertyExtension : INotifyPropertyChanged 
{ 
    protected void ChangeProperty<T>(T value, ref T field, [CallerMemberName] string property = "") 
     { 
      if ((value!= null) && (!value.Equals(field))) 
      { 
       field = value; 
      } 
      if (property != "") 
      { 
       this.OnPropertyChanged(property); 
      } 

     } 
... 
} 

到目前爲止,這工作挺好的,它爲我節省了很多時間。但是我仍然不能在自動屬性中使用它。因此字段仍然是必需的:

private int _ItemNumber; 
    public int ItemNumber 
    { 
     get { return _ItemNumber; } 
     set { ChangeProperty(value, ref _ItemNumber); } 
    } 

所以重點是:當我改變屬性的類型時,我也必須改變字段。我的想法是將該字段更改爲動態:

private dynamic _ItemNumber; 
    public int ItemNumber 
    { 
     get { return _ItemNumber; } 
     set { ChangeProperty(value, ref _ItemNumber); } 
    } 

這是工作到目前爲止,我找不到任何錯誤。我的問題是:這是一個好習慣嗎?我錯過了什麼嗎?動態事件是一個很好的選擇嗎?它會影響性能嗎?會影響內存使用情況嗎? 我的目標是擁有一個易於維護的代碼,例如只有部分類只包含所有private dynamic字段以保持實際模型清潔。任何反饋都是需要的。

+0

要回答你的問題,使用私人領域的動態是好的,沒有錯。它不應該在您的應用程序中大大影響性能。通過部分類將字段放入單獨的文件中可能會隱藏它們實際存在的事實,並且稍後在您回過頭來維護您的項目時會讓您感到困惑。我不會那樣做。正如Piotr回答,如果你想爲你的模型/視圖模型簡化代碼,那麼像Fody這樣的框架可以爲你提供。 –

回答

2

我建議使用開始:PropertyChanged.Fody :)

https://github.com/Fody/PropertyChanged

這樣一來,你的代碼是乾淨整潔 - 因爲它假設是:)

你的理論模型MVVM將是:

public class ViewModel 
    { 
     public int ItemNumber { get; set; } 
    } 

讓PropertyChanged.Fody爲你休息。