2013-04-26 7 views
0

보기가 표시된 직후에 일부 코드 (메시지 상자를 표시한다고 가정 해 봅시다)를 실행해야합니다. OnInitialize, OnViewLoaded 또는 OnViewAttached을 무시하려고했으나 항상 같습니다. 보기가 아직 완전히 표시되지 않았습니다.보기가 표시 될 때 caliburn 마이크로 실행 코드?

보기를 표시 할 때 일부 애니메이션을 사용하지만 동시에 일부 데이터를 눈금에로드해야합니다. OnInitialize, OnViewLoaded 또는 OnViewAttached에 데이터를로드하면 데이터를로드 할 때와 같은 일이 발생하므로 애니메이션이 원활하지 않습니다.

의견이 있으십니까?

+0

는 소리 (IResult를 구현해야합니다 코 루틴은 정보에 대한 CM의 코드 플렉스 사이트의 문서를 보라) 로드가 적다. 코 루틴을 사용하여 애니메이션이 완료 될 때까지 기다린 다음 데이터를로드하거나 바인딩하는 것이 좋습니다. – Charleh

답변

0

이 같은 시도 뭔가를 부여 - 애니메이션 그리드를 바인딩하기 전에 완료 될 때까지 기다려야하는 couroutine를 사용

private IEnumerator<IResult> ViewModelStartup() 
{ 
    yield return new WaitForAnimation("AnimationName"); 
    BindData(); 
} 

(주 - 당신은 데이터 비동기를로드 할 수 있지만, 단지 그것을 할당하지 마십시오) 다음

때 양식로드 :

private void OnViewAttached() 
{ 
    Coroutine.BeginExecute(ViewModelStartup(), new ActionExecutionContext() { View = this.GetView() }); 
} 

(위의 코드를하지 않을 수 있습니다 100 % ... 내가 생각 View에서 FrameworkElement해야합니다 필요에 따라 캐스트하거나 래퍼 클래스를 만듭니다.

coroutine을 구현하면 뷰의 이름이 지정된 애니메이션을 검색하고 콜백을 시작하기 전에 완료 될 때까지 기다립니다. 애니메이션을 찾을 수없는 경우 콜백을 시작해야합니다. couroutine은 여러보기에서 사용할 수 있습니다.

당신이 바인딩 된 데이터 따라서 UI 스레드가 잠금을 렌더링 그리드로 실행하는 것처럼

http://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&referringTitle=Documentation

관련 문제