2016-05-23 17 views
1

Ich verwende ein MVVM-Muster in einer WPF-Anwendung und zu Lernzwecken habe ich eine Frage zu Speicherlecks.Läuft dieser OneWay-Binding-Speicher?

Ich habe die Postsharp-Bibliothek verwendet.

Mein Ansichtsmodell sieht wie folgt aus:

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

Frage:

Ist diese Bindung Leck-Speicher? In meinen Tests scheint es nicht zu lecken, aber ich verstehe nicht warum?

Die Bindung an den Eigenschaftsnamen ist nur ein Getter von der KlasseA, der INotifyPropertyChanged nicht implementiert.

+2

Warum denken Sie, dass es ein Speicherleck gibt? – StepUp

+0

ClassA implementiert nicht INotifyPropertyChanged. Und meine Eigenschaft return Der Name des ClassA-Objekts. Oder überschreibt die Name-Eigenschaft, die mit NotifyPropertyChanged markiert ist, das? –

Antwort

2

Ihr ClassA implementiert INotifyPropertyChanged nicht, aber Sie sind an eine Eigenschaft in der Klasse MyViewModel gebunden, die dies tut! Daher sollten Sie keine Speicherlecks haben.

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

Es gibt ein Problem, bei dem WPF prüft Dinge zu finden, die INotifyProperyChanged implementieren. Wenn es eine Datenbindung zu etwas nicht , das diese Schnittstelle implementiert, gibt, dann macht es einen Datensatz in einer globalen Tabelle. Dieser Datensatz wird nicht bereinigt, da WPF keine Möglichkeit hat, zu überprüfen, wenn dieser DB-Datensatz nicht mehr benötigt wird.

+0

Ah ich sehe! Der Artikel, den du verlinkt hast, war wirklich interessant und der Verstand öffnete sich für mich. Ich habe gerade das Speicherleckgebiet erforscht und möchte mehr Wissen darüber haben. –

+1

@ J.Olsson, Froh, dem Kerl zu helfen – Natxo