【问题标题】:How do you bind the DataContext of a Control to the DataContext of its Content in WPF?如何将控件的 DataContext 绑定到 WPF 中其内容的 DataContext?
【发布时间】:2023-04-10 00:12:01
【问题描述】:

我试过了:

Binding binding = new Binding("Content.DataContext");
BindingOperations.SetBinding(tab, DataContextProperty, binding);

它不工作。我不知道为什么。

【问题讨论】:

  • 您是否尝试过以声明方式执行此操作? (通过 xaml)?

标签: wpf data-binding datacontext


【解决方案1】:

您尚未指定绑定的来源。因此,它使用tab 元素的本地DataContext。由于 tab 元素还没有 DataContext(这是您要设置的内容),更不用说路径 Content.DataContext 对其有意义的元素了,这将不起作用。

改为使用类似的东西:

Binding binding = new Binding("Content.DataContext")
{
  RelativeSource = RelativeSource.Self
};
BindingOperations.SetBinding(tab, DataContextProperty, binding);

(根据您的具体要求,您可能还想使用 Binding.Source 而不是 Binding.RelativeSource 进行调查。)

RelativeSource 设置指定绑定到与绑定目标相同的元素,而不是本地 DataContext——因此,控件的 DataContext 现在绑定到 Content 的 DataContext根据需要使用相同的控件。

【讨论】:

    【解决方案2】:

    可能有更好的方法来实现您尝试在 XAML 中使用绑定执行的操作,但如果您仍然使用代码隐藏,则可以尝试以下方法:

    FrameworkElement fe = tab.Content as FrameworkElement
    if (fe != null)
        tab.DataContext = fe.DataContext;
    

    没有任何约束。

    【讨论】:

    • 不会编译。内容被声明为类型对象,并且对象没有 DataContext 属性。
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多