4

CM Conductor が Active を TransitioningContentControl のコンテンツに適切にバインドするのに問題があります。

それが重要な場合に備えて、私はConductor<Screen>.Collection.OneActive

問題を再現する手順

導体 ActiveItem にバインドされた TransitioningContentControl を作成します。

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

2 つのボタンを作成します。

<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 をクリックすると、ActiveItem が正常に _viewModel1 に戻されても、Nav2 のビューが画面に表示されたままになります。

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

アイデア?ActiveItem に直接バインドすることに何か問題がありますか?

編集:

「Just my code」デバッグをオフにした後、移行中に 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  

それが役立つかどうかはわかりません。

4

1 に答える 1

0

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

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

これがお役に立てば幸いです

マーティン

于 2012-05-14T07:52:24.317 に答える