WinRT アプリケーション内で Caliburn.Micro を使用しています
これが私のメインの VM です。
public class MainViewModel : Conductor<Screen>
{
protected override void OnActivate()
{
if (ActiveItem == null)
{
ActivateItem(
ViewModelLocator.LocateForViewType(typeof(NewsFeedView)) as Screen);
}
base.OnActivate();
}
}
ここでは、ContentControl にさまざまなコントロールをロードしたいのでコンダクターを使用しますが、今はこのコードしかありません。メイン ビューのコンテンツ コントロールは次のとおりです。
<ContentControl x:Name="ActiveItem" Grid.Column="1" Grid.Row="1" />
アプリケーションを実行すると、すべて正常に動作し、MainViewModel.Activate
呼び出されてにActiveItem
設定されNewsFeedViewModel
、ContentControl
ロードされますNewsFeedView
。
問題:
メソッドをNewsFeedView
使用してコントロール内で別のビューに移動し、そのビューで を使用すると、 に戻り、その瞬間に呼び出されるのはではなくです。添付プロパティを使用しようとしましたが、運がありません。再バインドするにはどうすればよいですか?NavigationService.NavigateToViewModel
NavigationService.GoBack
MainView
MainViewModel.Activate
ActiveItem
null
ContentControl.Content
null
View.Model
ContentControl
編集: 最後に、何が起こるかを確認するために Caliburn でロガーをセットアップしましたが、エラーが見つかりました。
Attaching ***.Views.MainView to ***.ViewModels.MainViewModel.
ViewModel bound on ActiveItem.
Using cached view for ***.ViewModels.NewsFeedViewModel.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: Unspecified error
at Windows.UI.Xaml.Controls.ContentControl.put_Content(Object value)
... some winRT stack
at Caliburn.Micro.View.SetContentPropertyCore(...
それほど有益ではありませんでしたが、InteliTrace を使用して詳細情報を取得したところ、「要素は既に別の要素の子です」というメッセージが表示されました。NewsFeedView がどこかに保存されていて、それを ContentControl に入れるときに、この例外がスローされたと思います。これを解決するには?