gpt4 book ai didi

mvvm - 如何判断一个 View 是否有特定的控件

转载 作者:行者123 更新时间:2023-12-03 10:38:01 24 4
gpt4 key购买 nike

考虑以下 xaml:

<UserControl>
<Grid x:Name="UiRoot"/>
</UserControl>

现在,在 ViewModel 中,我有一个对 View 的引用(来自 Caliburn.Micro OnViewLoaded)。然后我需要确定 View 是否有一个名为 UiRoot 的网格。
protected override void OnViewLoaded(object view) {
base.OnViewLoaded(view);
//Does the view have a UiRoot?
}

这段代码其实是在ViewModelBase中,有时候View会有一个UiRoot,有时候没有。它用于在 View 确实存在时动态创建 View 。

我的第一个想法是创建一个 IHasUiRoot 接口(interface)并将其放入代码隐藏中。然后我可以将它转换为 IHasUiRoot。这行得通,但由于我有一个其他空的代码隐藏,我想保持这种方式并通过反射或其他方式来完成。最后,我需要一个对实际控件的引用,以便动态地向它添加控件。

最佳答案

如果您正在实现 IViewAware可以使用 IViewAware.GetView() 的 View 模型,例如 Screen方法(在 OnViewLoaded 中我认为是 IViewAware 无论如何)来获取对 View 的引用

然后你可以使用 VisualTreeHelperControl.FindName获取对控件的引用:

var view = this.GetView() as Control;
if(view != null)
{
var grid = view.FindName("UiRoot") as Grid;

if(grid != null) // do stuff...
}

关于mvvm - 如何判断一个 View 是否有特定的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17355000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com