2016-05-23 49 views
1

我在WPF應用程序和教育目的中使用MVVM模式我有一個關於內存泄漏的問題。這是單向綁定泄漏內存嗎?

我一直在使用Postsharp庫。

我的視圖模型看起來像下面:

public class MyViewModel : INotifyPropertyChanged 
{ 
    private ClassA _myClassAField; //ClassA doesn't Implement INotifyPropertyChanged 

    public MyViewModel(ClassA classAParameter) 
    { 
      _myClassAField = classAParameter; 
    } 

    [NotifyPropertyChanged] 
    public string Name { get { return _myClassAField.Name; } } 


    .....//Other Code.....  
} 

的XAML:

<Textblock Text="{Binding Name, Mode=OneWay}"/> 

問:

這是否綁定泄漏內存? 在我的測試中,它似乎沒有泄漏,但我不明白爲什麼?

對Property Name的綁定只是來自未實現INotifyPropertyChanged的ClassA的getter。

+2

爲什麼你認爲存在內存泄漏? – StepUp

+0

ClassA不執行INotifyPropertyChanged。而我的get屬性返回ClassA對象的名稱。或者將用NotifyPropertyChanged標記的名稱屬性覆蓋那個? –

回答

2

您的ClassA未執行INotifyPropertyChanged,但您對MyViewModel類中的某個屬性有約束力!因此你不應該有內存泄漏。

參考:https://blogs.msdn.microsoft.com/micmcd/2008/03/07/avoiding-a-wpf-memory-leak-with-databinding-black-magic/

有一種情況WPF檢查發現,實施 INotifyProperyChanged事情的問題。如果有一個數據綁定不是 實現這個接口,那麼它會在全局表中創建一條記錄。 該記錄沒有得到清理,因爲WPF沒有辦法檢查何時不再需要數據庫記錄的 。

+0

啊我看到了!你鏈接的文章真的很有趣,併爲我打開心靈。我剛剛在探索內存泄漏領域,並希望獲得更多的知識。 –

+1

@ J.Olsson,很高興幫助兄弟 – Natxo