Caliburn - PropertyChanged для ребенка ViewModel - PullRequest
1 голос
/ 18 июля 2010

Я использую Caliburn и шаблон MVVM в приложении WPF и пытаюсь использовать как можно больше соглашений.Одна проблема, с которой я сталкиваюсь, - это когда мне нужно соединить уведомления об изменении свойств в импортированном классе.

Скажем, у меня ViewModel, например, так:

class ViewModelA
{
    private readonly IViewModelB _b;

    public ViewModelA(IViewModelB b)
    {
        _b = b;
    }

    public bool CanGo
    {
        get { return _b.MyBoolProperty; }
    }

    public void Go()
    {
        //Does something here
    }
}

Что такоерекомендуемый (правильный) способ вызова NotifyOfPropertyChange (() => CanGo), когда событие PropertyChanged для MyBoolProperty запускается из ViewModelB?

В прошлом я использовал класс типа PropertyObserver для управления этим.

Или я проектирую этот сценарий совершенно неправильно?

1 Ответ

3 голосов
/ 18 июля 2010

Если ваша «sub» -модель предоставляется с открытым свойством, вы можете использовать DependenciesAttribute для отслеживания изменений:

 
class ViewModelA
{
    public IViewModelB B {get; private set;}

    public ViewModelA(IViewModelB b)
    {
        B = b;
    }

    public bool CanGo
    {
        get { return B.MyBoolProperty; }
    }

    [Dependencies("B.MyBoolProperty")]
    public void Go()
    {
        //Does something here
    }
}

Для правильной работы весь путь свойства должен состоять из уведомляющих объектов. Вы также можете поставить окончательный "*"

[Dependencies("B.*")]

, чтобы указать, что все свойства B должны вызывать переоценку предусловия; обратите внимание, что «*» действует только в конце правильного пути и только для одного уровня глубины (он не отслеживает изменения на подмоделях B).

...