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中。当前版本仍然有缺陷,但当从源代码编译时,我得到了预期的行为。
谢谢你的帮助
在XAML中创建绑定时,默认情况下绑定到当前DataContext。在这个例子中,MyViewController
似乎是sdk:TargetControl
的DataContext。要绑定到skd:TargetControl
的Name
属性,请尝试以下操作:
<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的特定属性