2016-05-23 5 views
1

私はWPFアプリケーションと教育目的でMVVMパターンを使用していますが、メモリリークに関する質問があります。このOneWay Bindingはメモリをリークしますか?

私はPostsharpライブラリを使用していました。

私のViewModelには、次のようになります。

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}"/> 

質問:

い、この結合リークメモリ? 私のテストでは漏れているようではないようですが、私はなぜそれが分かりませんか?

プロパティ名へのバインドは、INotifyPropertyChangedを実装していないClassAからのゲッターだけです。

+2

なぜメモリリークがあると思いますか? – StepUp

+0

ClassAはINotifyPropertyChangedを実装していません。そして、私のgetプロパティは、ClassAオブジェクトの名前を返します。またはNotifyPropertyChangedでマークされたNameプロパティはそれをオーバーライドしますか? –

答えて

2

ClassAINotifyPropertyChangedを実装していませんが、クラスMyViewModelのプロパティにバインドしています。したがって、メモリリークは発生しません。参考のため

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

WPFは INotifyProperyChangedを実装するものを見つけるためにチェックする問題があります。 がこのインタフェースを実装していないものへのデータバインディングがある場合、グローバルテーブルにレコードを作成します。 そのレコードがクリーンアップされません.WPFは、 DBレコードが不要になったときにチェックする方法がありません。

+0

ああ、私は見て!あなたがリンクした記事は本当に面白かったし、私にとって心が開かれていた。私はちょうどメモリリーク領域を探索しており、それについてもっと知識を持ちたいと思っています。 –

+1

@ J.Olsson、助けてくれてうれしい – Natxo

関連する問題