在WPF中绑定到祖先元素

35
我有一个窗口在一个程序集中,其中有一个 TextBlock 控件,我希望将其绑定到该窗口父级的 DataContext 的类的属性值。充当 DataContext 的类仅在第二个程序集中定义。我的问题是,在绑定语句中我需要指定什么类型。我可以只使用两个程序集中共同的 DataContext 属性的类型吗?还是我需要使用 DataContext 的类型?
以下是我认为应该如何工作的原型,但由于它不起作用,所以我对某些东西感到困惑 :)
#1 程序集 Window
<TextBlock 
    Text="{Binding RelativeSource={RelativeSource 
        AncestorType={x:Type client:Client}}, Path=Name }"/>

汇编 #2
应用程序 Shell

class Shell 
{
     public Client Client { get { return client; } set { client = value; } }
     OnStartup()
     {
          NavigationWindow window = new NavigationWindow();
          window.DataContext = this;
          window.Navigate(GetHomeView());
     }
}
1个回答

74

以下代码应该可以正常工作:

<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                                                         AncestorType={x:Type Window}},
                                                         Path=DataContext.Client.Name}" />

完美。直接绑定到 Entity Framework Core 模型对象(在 ViewModel 内部)时也可以正常工作,除了组合框的内容(在 ViewModel 内部的单独列表)。 - Jonas
你能解释一下这是如何工作的吗?我把路径改成了“Title”,但在设计器中没有显示。 - Pawcio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接