2013-04-26 66 views
0

我需要在顯示視圖後立即運行一些代碼(假設要顯示消息框)。我試圖覆蓋OnInitializeOnViewLoadedOnViewAttached,但它總是相同的。該視圖尚未完全顯示。caliburn當代碼可見時顯示微代碼?

我在顯示視圖時使用了一些動畫,但同時需要將一些數據加載到網格中。如果我將數據加載到OnInitializeOnViewLoadedOnViewAttached,則動畫不平滑,因爲它在加載數據的同時發生。

有什麼想法?

+0

聽起來你正在運行到網格渲染綁定的數據,因此在UI線程鎖定很小,因爲它加載。爲什麼不使用協程來等待動畫完成,然後加載或綁定數據 – Charleh 2013-04-26 19:14:28

回答

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必須在根據需要鑄造或創建包裝類)

協同工具WaitForAnimation的實現將在視圖中搜索命名的動畫,並在觸發回調之前等待它完成。如果找不到動畫,您可能應該發起回調。該調查可用於多個視圖。

(協同程序必須實現IResult看看在CM的CodePlex網站信息的文檔)

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