考虑以下 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。这行得通,但由于我有一个空的代码隐藏,我想保持这种方式并通过反射或其他方式来实现。最后,我需要一个对实际控件的引用,以便动态地向它添加控件。