在WPF中首先使用视图模型(DataTemplate)时,从Shell窗口找到UserControl

在WPF中首先使用视图模型(DataTemplate)时,从Shell窗口找到UserControl,wpf,window,datatemplate,Wpf,Window,Datatemplate,我正在使用DataTemplate(先查看模型)将UserControl加载到shell窗口中。 如何获取当前包含在该窗口中的UserControl的引用?您可以获取当前应用程序窗口: Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); Application.Current.Windows.OfType().SingleOrDefault(x=>x.IsActive);

我正在使用DataTemplate(先查看模型)将UserControl加载到shell窗口中。
如何获取当前包含在该窗口中的UserControl的引用?

您可以获取当前应用程序窗口:

Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
Application.Current.Windows.OfType().SingleOrDefault(x=>x.IsActive);

然后你可以检查它的内容/子项。但这将打破MVVM模式,我猜您正试图实现这一模式。如果需要将某些内容连接到特定于usercontrol的内容,则应使用交互行为。

为什么需要usercontrol而不需要ViewModel?首先查看模型时,请加载ViewModel(不是usercontrol)并将其绑定到contentcontrol.content属性。wpf完成剩下的工作并搜索数据模板,以在用户控件中显示您的viewmodel。为什么拒绝投票??@Mark Green:我需要一个对用户控件的引用,因为有一个严格的UI操作需要完成——只在WPF客户端中@blindmeis:我首先知道视图模型中的工作原理,而且我仍然需要使用当前的用户控件。即使使用datatemplate,usercontrol也会触发onload事件。那么谁需要对usercontrol的引用呢?@blindmeis:这不是我为什么需要引用的问题,也不是它是否与MVVM兼容的问题,而是如何获得它的问题。onload在这里不起作用。不好-那些属性不会给我当前的用户控制。我完全知道这破坏了模式,但在这种情况下这不是一个坏的做法-我需要执行一个与WPF客户端一致的UI操作。