2016-08-01 6 views
1

그래서 기본적으로 세 가지보기 모델이 있습니다. 하나는 모든 데이터가 실시간으로 저장되고 계산되는 ShellViewModel입니다. 그리고 다른 방식으로 계산을 보여주는 두 개의 다른보기 모델. 이 두 VM은 쉘 뷰 내에 뷰로 표시됩니다 (caliburn 컨테이너 및 ContentControl과 바인드 된 ActiveItem을 통해). 다른 VM에 데이터를 가져 오기 위해 두 번째 VM의 생성자에서 해당 속성을 전송하여 쉘 VM의 속성에 속성을 바인딩합니다.WPF 여러보기 모델에서 작동하지 않는 알림

VM = new ViewModelA(_PropertyOfShellVM); 
//--- 
ViewModelA(PropertyOfShellVM p) 
{ 
    VMProp = p; 
} 

속성은 알림 기능이없는 DLL의 클래스입니다. 참조 유형으로 VM의 클래스는 동일합니다. 다른 VM에서는 해당 클래스 속성에 바인딩됩니다.

class PropertyOfShellVM 
{ 
    bool PropertyA{get;set;} 
    int PropertyB{get;set;} 
} 

<CheckBox Content="PropA" IsChecked="{Binding VMProp.PropertyA}"/> 
<Slider Value="{Binding VMProp.PropB}"/> 

이러한 클래스는 매우 자주 변경되고 지속적으로 업데이트해야한다는 것입니다. 하지만 Caliburn의 NotifyOfPropertyChange (() => VMProp)를 사용할 때 UI가 업데이트되지 않습니다. 속성 가져 오기 도구에 Notify를 쓰려고했지만 아무런 효과가 없습니다. 또한 Caliburn의 이벤트 관리자를 통해 새로운 결과를 보낸 사용자 지정 이벤트에서 VM 속성을 다시 바인딩하려고 시도했지만 속도가 너무 느립니다.이 값은 초당 여러 번 변경되지만 이벤트는 3 번에 한 번만 업데이트됩니다 초). 알림은 어떻게 수정 될 수 있습니까?

답변

0

VM의 모든 속성을 UI에서 새로 고치는 VM Refresh() 메서드를 사용하여이 문제를 해결했습니다. 그것은 좋은 습관의면에서 다소 거친 결정이지만 충분히 빠르며 작동합니다. 아마도 이것을 더 좋은 해결책으로 생각하기 때문에 답으로 표시하지 않을 것입니다.

0

하나의보기 모델에서 다른보기 모델로 변경 사항을 전달하려면 Caliburn.Micro'sEvent Aggregator을 사용할 수 있습니다. 그래도 성능에 어떤 영향을 미치는지 잘 모르겠습니다.

+0

마지막 단락에서 나는 그것을 시도했다고 말했고 실제로는 느리다. =) 나는 Caliburn 이벤트 매니저라고 말하지 않았다. mb –