Фреймворк Catel — ленивое свойство

Я пытаюсь создать ленивое свойство с помощью структуры Catel. Есть ли способ сделать это?

Когда я создаю свойство в ViewModel следующим образом:

#region Photos property

/// <summary>
/// Gets or sets the Photos value.
/// </summary>
public FastObservableCollection<Photo> Photos
{
    get
    {
        var temp = GetValue<FastObservableCollection<Photo>>(PhotosProperty);
        if (temp == null)
            Photos = SelectedPatient.GetPhotos();
        return GetValue<FastObservableCollection<Photo>>(PhotosProperty);
    }
    set { SetValue(PhotosProperty, value); }
}

/// <summary>
/// Photos property data.
/// </summary>
public static readonly PropertyData PhotosProperty = RegisterProperty("Photos", typeof (FastObservableCollection<Photo>));

#endregion

функция get вызывается даже без привязки, поэтому мое ленивое свойство инициализируется во время инициализации ViewModel.

Есть ли способ сделать это?


person Tomasz    schedule 14.06.2015    source источник
comment
Может быть, есть возможность обрабатывать «visibilitychanged» соответствующего представления из ViewModel? Это также был бы вариант (обходной путь)   -  person Tomasz    schedule 14.06.2015


Ответы (1)


Существует только один способ реализовать «ленивые свойства» — использовать класс Lazy‹>. Причина этого в том, что для некоторых сопоставлений (например, модели представления с моделью и т. д.) Catel использует SetValue напрямую, а не оболочку свойства (сравните свойства Catel со свойствами зависимостей).

person Geert van Horrik    schedule 14.06.2015
comment
Не могли бы вы опубликовать образец такого имущества, пожалуйста? - person Tomasz; 14.06.2015