Pergunta

Eu estou usando Caliburn e o padrão MVVM em um aplicativo do WPF, e estou tentando usar como muitas convenções possível.Uma questão que eu tenho é quando eu tenho a fio até alguns propriedade alterada notificações em uma classe importado.

Dizem que eu tenho um ViewModel assim:

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

O que é o recomendado (correto) caminho para a chamada NotifyOfPropertyChange(() => CanGo) quando o evento PropertyChanged para MyBoolProperty é disparou ViewModelB?

No passado eu usei um PropertyObserver tipo de classe para gerenciar isso.

Ou eu sou projetando este cenário completamente errado?

Foi útil?

Solução

Se o seu "sub"-modelo é exposto, com um público de propriedade, você pode usar DependenciesAttribute para registar as alterações:

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

Para funcionar corretamente, todo o caminho para a propriedade deve ser composto de comunicação com os objetos.Você também pode colocar um final "*"

[Dependencies("B.*")]

para indicar que todas as propriedades de B deve fazer com que a condição de re-avaliação;note que o "*" age somente no final do proprerty caminho e apenas para um nível de profundidade (ele não controla as alterações no sub-modelos do B).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top