2012-04-27 87 views
3

我有一個問題讓我的CM Conductor保持Active的適當綁定到TransitioningContentControl的內容。Caliburn微導體+ TransitioningContentControl

在它的事項的情況下,我使用的是Conductor<Screen>.Collection.OneActive

步驟來重現問題

創建綁定到導體上TransitioningContentControl ActiveItem:

<toolkit:TransitioningContentControl x:Name="ActiveItem" /> 

創建兩個按鈕:

<Button x:Name="Nav1" Content="Test1"></Button> 
<Button x:Name="Nav2" Content="Test2"></Button> 

在視圖模型,線了NAV1和NAV2點擊事件設置activeitem

public void Nav1() 
{ 
    ActiveItem = _viewModel1; 
} 

public void Nav2() 
{ 
    ActiveItem = _viewModel2; 
} 

乍一看,這似乎很好地工作 - 但有一個問題。假設活動項目代表Nav1(_viewModel1)。

如果您然後單擊Nav2,然後在transitioniningContentControl完成轉換之前單擊Nav1,Nav2的視圖仍將顯示在屏幕上,即使ActiveItem將成功設置回_viewModel1。

這使您處於ActiveItem爲_viewModel1的無效狀態,但正在顯示的視圖綁定爲_viewModel2。

想法?有沒有直接綁定到ActiveItem的問題?

編輯:

關閉「只是我的代碼」調試後,我看到有一個ArgumentException在過渡期間設置ActiveItem時被拋出。堆棧跟蹤顯示:

at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
(lots of junk) 
Caliburn.Micro!Caliburn.Micro.View.SetContentPropertyCore(object targetLocation, object view) + 0xec bytes 
Caliburn.Micro!Caliburn.Micro.View.SetContentProperty(object targetLocation, object view) + 0x84 bytes 
Caliburn.Micro!Caliburn.Micro.View.OnModelChanged(System.Windows.DependencyObject targetLocation, System.Windows.DependencyPropertyChangedEventArgs args) + 0xda bytes 

不確定這是否有幫助。

回答

0

嘗試使用Conductors ActivateItem方法來改變ActiveItem屬性。

public void Nav1() 
{ 
    ActiveItem(_viewModel1); 
} 

我希望這將有助於

馬丁

+0

無所謂。 ActiveItem設置器只是轉過身來,並且無論如何都調用ActivateItem:public T ActiveItem {{{0} {get} {return activeItem; } set {ActivateItem(value); } } – 2012-05-17 22:33:46