2016-05-23 7 views
1

Я использую шаблон MVVM в приложении WPF и в образовательных целях у меня есть вопрос о утечке памяти.Является ли это 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.

+2

Почему вы думаете, что есть утечка памяти? – StepUp

+0

ClassA не реализует INotifyPropertyChanged. И мое свойство get возвращает имя объекта ClassA. Или будет ли свойство Name, помеченное 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