gpt4 book ai didi

wpf - 在 UserControl 中设置 DataContext 会影响父级中的绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 11:10:58 25 4
gpt4 key购买 nike

我有一个基本的 UserControl设置其 DataContext为便于绑定(bind):

<UserControl x:Class="MyControlLib.ChildControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

DataContext="{Binding RelativeSource={RelativeSource Self}}">

</UserControl>

这在父 XAML 文件中使用,如下所示:
<UserControl x:Class="MyControlLib.ParentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ctrl="clr-namespace:MyControlLib">

<ctrl:ChildControl x:Name="ChildName"
PropertyOnChild="{Binding PropertyInParentContext}"/>
</UserControl>

出于某种原因,这给出了一个绑定(bind)错误,似乎表明 DataContext父控件受到子控件设置自己的影响 DataContext .

System.Windows.Data Error: 40 : BindingExpression path error: 'PropertyInParentContext' property not found on 'object' ''ChildControl' (Name='ChildName')'. BindingExpression:Path=PropertyInParentContext; DataItem='ChildControl' (Name='ChildName'); target element is 'ChildControl' (Name='ChildName'); target property is 'PropertyOnChild' (type 'whatever')



为什么在子控件中而不是在父控件中查找“PropertyInParentContext” DataContext ?

如果我删除
DataContext="{Binding RelativeSource={RelativeSource Self}}

从 child 控制,然后事情运作如何我所期望的。

我在这里遗漏了一些明显的东西吗?

最佳答案

控件的声明和实例化基本上是在操作同一个对象,声明中设置的所有属性也设置在每个实例上。因此,如果属性是“可见的”,可以这么说:

<UserControl x:Class="MyControlLib.ParentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ctrl="clr-namespace:MyControlLib">
<ctrl:ChildControl x:Name="ChildName"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
PropertyOnChild="{Binding PropertyInParentContext}"/>
</UserControl>

这就是为什么你不设置 DataContextUserControls ,它将覆盖继承的 DataContext (甚至混淆了存在不同上下文的事实)。如果要绑定(bind)到 UserControl 的属性然后在其声明中命名控件并使用 ElementNameRelativeSource -bindings 代替。

关于wpf - 在 UserControl 中设置 DataContext 会影响父级中的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com