WPF绑定错误(绑定到DataContext)

本文关键字:绑定 DataContext 错误 WPF | 更新日期: 2023-09-27 17:50:58

首先让我说一下,我对WPF相当陌生,所以请原谅我犯的任何愚蠢的错误,但我已经在这个问题上绞尽脑汁一段时间了。

我有一个简单的解决方案,有三个类:

public class MyCustomItem
public class MyCustomLayout : ThirdPartyLayout<MyCustomItem>
public class MyViewController : INotifyPropertyChanged

MyCustomItem是一个简单的类,带有一些属性("Name"是其中之一)。ThirdPartyLayoutTool是SDK中的一个通用组件,它继承自System.Windows.Controls.Panel。MyViewController是我用来作为数据内容的视图控制器

然后我创建了这个简单的XAML作为项目的主窗口:
<Window x:Class="DependencyViewer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sdk="clr-namespace:Sdk;assembly=Sdk"
    xmlns:local="clr-namespace:MyNamespace"
    Title="MainWindow" Height="350" Width="525">

    <local:MyCustomLayout x:Name="myLayout"/>
</Window>

所有内容都相应地显示。现在,我的目标是增强由ThirdPartyLayout面板(称为TargetControl)显示的子组件之一的显示。所以我添加了以下代码:

<Window.Resources>
    <Style TargetType="{x:Type sdk:TargetControl}">
        <Style.Resources>
            <ToolTip x:Key="ToolTipContent">
                <StackPanel>
                    <TextBlock FontWeight="Bold" Text="Testing 1 2 3"/>
                    <TextBlock Text="{Binding Name}"/>
                </StackPanel>
            </ToolTip>
        </Style.Resources>
        <Setter Property="ToolTip" Value="{StaticResource ToolTipContent}"/>
    </Style>
</Window.Resources>

当我运行代码时,"Testing 1 2 3"消息正确显示,但是,我没有看到Name属性。在输出窗口中,我得到以下消息:

BindingExpression path error: 'Name' property not found on 'object' ''MyViewController' (HashCode=31884011)'

我不明白的是为什么绑定发生在MyViewController类上,而不是TargetControl类。什么好主意吗?

最诚挚的问候,卡洛斯Jourdan

编辑:

在主要根据newb给出的建议对guide进行了修修补补之后,我最终发现错误的根源其实是在SDK中。当前版本仍然有缺陷,但当从源代码编译时,我得到了预期的行为。

谢谢你的帮助

WPF绑定错误(绑定到DataContext)

在XAML中创建绑定时,默认情况下绑定到当前DataContext。在这个例子中,MyViewController似乎是sdk:TargetControl的DataContext。要绑定到skd:TargetControlName属性,请尝试以下操作:

    <TextBlock Text="{Binding Name, RelativeSource={RelativeSource AncestorType={x:Type sdk:TargetControl}}}"/>

似乎MyViewController的xaml.cs的DataContext有MyCustomItem的引用。

如果你想,你可以在example .cs中设置MyCustomLayout。ItemsSource = this.DataContext.

或者你可以用MyCustomLayout。ItemsSource = MyCustomItem的特定属性