Caliburn - PropertyChanged para a criança ViewModel
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?
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).