Wpf 转换器能否了解父控件?

Wpf 转换器能否了解父控件?,wpf,mvvm,prism,Wpf,Mvvm,Prism,我有一个Prism核心MVVM应用程序,它重用了一些视图,比如CustomerView。最初,CustomerView在主窗口视图中显示为“平铺”。当用户单击它时,该CustomerView的新实例将使用my WindowsService在新的窗口中打开。CustomerView有一个菜单。我想要的:如果CustomerView显示在MainWindowView的“平铺”菜单中,则应隐藏该菜单;如果在另一个不同的窗口中-菜单应可见。目前,我已经完成了代码隐藏。是否可能有一个转换器,它可以判断Cu

我有一个
Prism
核心MVVM应用程序,它重用了一些视图,比如CustomerView。最初,CustomerView在主窗口视图中显示为“平铺”。当用户单击它时,该CustomerView的新实例将使用my WindowsService在新的
窗口中打开。CustomerView有一个菜单。我想要的:如果CustomerView显示在MainWindowView的“平铺”菜单中,则应隐藏该菜单;如果在另一个不同的
窗口中
-菜单应可见。目前,我已经完成了代码隐藏。是否可能有一个
转换器
,它可以判断CustomerView是MainWindowView的一部分,还是其他一些
窗口
的一部分?

您可以绑定到
CustomerView
本身,并使用一个助手方法,尝试在可视树中查找父级
MainWindowView

public static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    var parent = VisualTreeHelper.GetParent(dependencyObject);

    if (parent == null) return null;

    var parentT = parent as T;
    return parentT ?? FindParent<T>(parent);
}
公共静态T FindParent(DependencyObject DependencyObject),其中T:DependencyObject
{
var parent=VisualTreeHelper.GetParent(dependencyObject);
if(parent==null)返回null;
var parentT=作为T的父项;
返回父母??找到父母(父母);
}
用法:

MainWindowView parent = FindParent<MainWindowView>(customerView);
if (parent != null)
    //MainWindowView found...
MainWindowView父对象=FindParent(customerView);
如果(父项!=null)
//找到MainWindowView。。。

Prism适用于不适用于窗口的区域。因此,您可以检查哪些视图位于某个区域内。@Gleb-这对我没有帮助,我需要它,相反-在视图中使用的converter可以显示它所在的区域内。我将向下重用一层,创建一个主窗口不带菜单的视图,以及一个带菜单的视图,用于带菜单的详细视图,两者都使用第三个视图作为公共内容。这三个视图模型也可以共享相同的视图模型。我想,平铺迟早会与细节视图的区别不仅仅在于菜单的存在,而且你将能够减少常见的内容……好吧,它应该可以正常工作,但我没有提到我的CustomerView驻留在ContentControl(Prism区域)中并使用Prism的regionManager.RequestNavigate方法显示。在这种情况下,如果我在中使用LogicalTreeHelper而不是VisualTreeHelper,则FindParent(customerView)总是返回null,而不管我为其Seem指定了什么类型FindParent@AlexeyTitov:你的问题在哪里?您的问题解决了吗?是的,解决了-如果我在FindParent方法中使用LogicalTreeHelper而不是VisualTreeHelper