2012-04-27 9 views
3

私は、CMコンダクタがActiveのコンテンツをTransitioningContentControlのコンテンツに適切にバインドすることに問題があります。それが重要な場合にはCaliburn Micro Conductor + 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)を表しているとします。

ActiveItemが正常に_viewModel1に設定されていても、Nav2をクリックして、transitioniningContentControlがトランジションを終了する前にNav1をクリックすると、Nav2のビューが画面に表示されます。

これは、ActiveItemが_viewModel1の無効な状態になりますが、表示されているビューは_viewModel2のものにバインドされています。

アイデア? ActiveItemに直接バインドするのに間違っていますか?

編集:

「ちょうど私のコード」デバッグをオフにした後、私は遷移中ActiveItemを設定するときにスローされるArgumentExceptionがあることを参照してください。スタックトレースは次のとおりです。

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

ActiveItemプロパティをstetする代わりに、Conductors ActivateItemメソッドを試してください。

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

は、私は、これは問題ではありません

マーティン

+0

を助けることを願っています。 ActiveItem setterはちょうど向きを変えて、ActivateItemをとにかく呼び出します。public T ActiveItem { get {return activeItem; } {ActivateItem(value); } } –

関連する問題