2010-07-17 8 views
1

저는 Caliburn과 MVVM 패턴을 WPF 응용 프로그램에서 사용하고 있으며 가능한 한 많은 규칙을 사용하려고합니다. 제가 실행중인 한가지 문제는 가져온 클래스에서 일부 속성 변경 알림을 연결해야하는 경우입니다.Caliburn - 하위 용 PropertyChanged 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) MyBoolProperty의하여 PropertyChanged 이벤트가 떨어져 해고 ViewModelB 무엇을 호출하는 것입니다 :

는 내가 지금과 같은 뷰 모델을 말해봐?

과거에는 이것을 관리하기 위해 PropertyObserver 유형 클래스를 사용했습니다.

아니면이 시나리오를 완전히 잘못 설계하고 있습니까? 당신의 "하위"- 모델이 공용 속성으로 노출되면

+0

AutoCheckAvailabilityAttribute가 CommandManager 입력 시스템에 의존하여이 작업을 수행 할 수 있음을 발견했습니다. 그러나이 옵션을 사용하면 CanGo 메서드를 원하는 것보다 더 많이 호출 할 수 있다고 생각합니다. DependenciesAttribute를 사용하여이 작업을 수행하려면 어떻게해야합니까? 어떻게 작동시키는 지 알 수는 없습니다. – jonathanpeppers

답변

3

, 당신은 변경 사항을 추적 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의 모든 속성이 전제 조건 재평가를 야기 함을 나타 내기 위해 "*"최종 넣을 수 있습니다; "*"는 proprerty 경로의 끝 부분에서만 작용하며 하나의 깊이 수준 (B의 하위 모델에 대한 변경 내용은 추적하지 않음)에 유의하십시오.

+0

"." 구문은 CanX 속성이 아니라 누락되었습니다. 나는 이것을 어디서나 사용하는 예를 찾을 수 없었다. – jonathanpeppers