Converter 可以了解家长控制吗?

Can Converter know about parent control?

我有一个 Prism 核心 MVVM 应用程序,它重用了一些视图,例如 CustomerView。最初,CustomerView 在 MainWindowView 中显示为 'tile'。当用户单击它时 - 使用我的 WindowService 在新 Window 中打开该 CustomerView 的新实例。 CustomerView 有一个菜单。我想要的:如果 CustomerView 显示在 MainWindowView 的 'tile' - 菜单应该被隐藏;如果在另一个不同的 Window - 菜单应该是可见的。目前,我已经通过代码隐藏完成了这项工作。是否可以有一个 Converter,它可以判断 CustomerView 是 MainWindowView 的一部分,还是其他 Window 的一部分?

您可以绑定到 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);
}

用法:

MainWindowView parent = FindParent<MainWindowView>(customerView);
if (parent != null)
    //MainWindowView found...