次の xaml を検討してください。
<UserControl>
<Grid x:Name="UiRoot"/>
</UserControl>
ここで、ViewModel にビューへの参照があります (Caliburn.Micro OnViewLoaded から)。次に、ビューに UiRoot という名前のグリッドがあるかどうかを判断する必要があります。
protected override void OnViewLoaded(object view) {
base.OnViewLoaded(view);
//Does the view have a UiRoot?
}
このコードは実際には ViewModelBase にあり、View に UiRoot がある場合とない場合があります。ビューが存在する場合に、ビューを動的に作成するために使用されます。
私が最初に考えたのは、IHasUiRoot インターフェイスを作成し、分離コードに配置することでした。次に、それを IHasUiRoot にキャストできます。これは機能しますが、それ以外の場合は空のコードビハインドがあるため、そのままにして、リフレクションまたはその他の方法で実行したいと思います。最後に、コントロールを動的に追加するには、実際のコントロールへの参照が必要です。