C# WPF错误40 BindingExpression路径错误:在';对象';
这个装订错误把我的头撞到了桌子上。。我已经检查了一些帖子中的C# WPF错误40 BindingExpression路径错误:在';对象';,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,这个装订错误把我的头撞到了桌子上。。我已经检查了一些帖子中的BindingExpression路径错误,看不到任何与我的情况相符的内容 无论如何,我有一个名为IncrementingTextBox的自定义控件。每当用户“选中”其上方的复选框时,我都会尝试禁用它 我在复选框IsChecked属性上有一个绑定,该绑定工作正常,并在应该的时候触发。它正确设置了ConfigurationModel上的UseSensorLength属性 但是,IncrementingTextBox属性上的绑定已启用会导致
BindingExpression
路径错误,看不到任何与我的情况相符的内容
无论如何,我有一个名为IncrementingTextBox
的自定义控件。每当用户“选中”其上方的复选框时,我都会尝试禁用它
我在复选框
IsChecked
属性上有一个绑定,该绑定工作正常,并在应该的时候触发。它正确设置了ConfigurationModel上的UseSensorLength
属性
但是,IncrementingTextBox
属性上的绑定已启用
会导致BindingExpression
路径错误,因此根本不会更新
作为一个测试,我尝试在代码隐藏中启用和禁用控件,它工作得很好,但我似乎无法让绑定对其工作
以下是我的xaml中的一个片段:
...
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...
...
<CheckBox Content="Use Sensor Length" Margin="30,6,0,0"
IsChecked="{Binding ConfigurationModel.UseSensorLength, Mode=TwoWay}"/>
<local:IncrementingTextBox x:Name="video_length_textbox" Margin="0,0,0,5"
IsTextEnabled="False"
IsEnabled="{Binding ConfigurationModel.DontUseSensorLength}"
ValueChanged="VideoEventValueChanged"/>
以下是运行应用程序时,我在输出窗口中收到的错误消息:
System.Windows.Data错误:40:BindingExpression路径错误:
在“对象”上找不到“ConfigurationModel”属性
“递增文本框”(Name='video\u length\u textbox')。
BindingExpression:Path=ConfigurationModel.DonTusseSensorLength;
DataItem='IncrementingTextBox'(Name='video\u length\u textbox');目标
元素是“IncrementingTextBox”(Name='video\u length\u textbox');目标
属性为“IsEnabled”(类型为“Boolean”)
请记住,“UseSensorLength”属性绑定工作正常,但“DonTusseSensorLength”绑定导致了上述“BindingExpression路径错误”。我最近写了一些关于如何读取绑定错误的文章,以便使它们更有意义。总之,在冒号和分号上的错误消息中添加换行符,并从下到上阅读
您的错误消息是:
- System.Windows.Data错误:40:
- BindingExpression路径错误:在“对象”“递增文本框”(Name='video\u length\u textbox')上找不到“ConfigurationModel”属性李>
- BindingExpression:Path=ConfigurationModel.DonTusseSensorLength李>
- DataItem='IncrementingTextBox'(Name='video\u length\u textbox')李>
- 目标元素是“IncrementingTextBox”(Name='video\u length\u textbox')李>
- 目标属性为“IsEnabled”(类型为“Boolean”)
这可以自下而上理解为:
- 绑定失败的原因是
IsEnabled
类型为IncrementingTextBox
(命名为video\u length\u textbox)的元素的属性
- 元素的
DataItem
(DataContext
)是类型为IncrementingTextBox
命名为video\u length\u textbox的对象
- 它试图找到的绑定表达式是
ConfigurationModel.DontUseSensorLength
- 绑定存在的问题是在数据上下文对象
IncrementingTextBox
上找不到ConfigurationModel
属性
因此,“视频长度文本框”的DataContext
设置为自身,而IncrementingTextBox
类没有名为ConfigurationModel
由于我没有看到您在XAML中的任何位置为IncrementingTextBox
设置DataContext
,请查看IncrementingTextBox
类的代码。最有可能的情况是在构造函数中将DataContext设置为自身
this.DataContext = this;
public partial class SampleClass: UserControl
{
public SampleClass()
{
ScenarioHeight = System.Windows.SystemParameters.WorkArea.Height - 350;
InitializeComponent();
}
public double ScenarioHeight { get;set;}
还是XAML
DataContext="{Binding RelativeSource={RelativeSource Self}}"
我也有同样的问题,因为我从中提取数据的对象的类并没有得到;并设置;关于它的性质
这不起作用:
public string Name;
但这起到了作用:
public string Name{ get; set; }
我也有同样的问题,在我的例子中,我使用了bool
而不是Boolean
。我一更换它,它就按预期工作。没有什么需要检查的
1.在构造函数中初始化组件之前在属性中赋值
this.DataContext = this;
public partial class SampleClass: UserControl
{
public SampleClass()
{
ScenarioHeight = System.Windows.SystemParameters.WorkArea.Height - 350;
InitializeComponent();
}
public double ScenarioHeight { get;set;}
2.如果是usercontrol,请确保在绑定中添加usercontrol作为元素
<ScrollViewer Name="sv" Height="{Binding Path=ScenarioHeight, ElementName=ucSampleClass}" >
当您以前试图使用XAML属性绑定不可访问或不存在的可枚举实例时,也可能发生此错误
当您使用正确的值更正ItemsSource
时,XAML不会自动重新实现项集合
因此,当我使用ListBox
UI-list表示时,我在属性中遇到了以下问题:
删除集合中的所有项并更正ItemSource
值是关键。我也有类似的经验,组合框上的ItemSource绑定不起作用
在我的例子中,这是一个小错误,但在启用跟踪消息之前很难跟踪
我只是忘记将我的列表转换为属性:(
//否:
公开列表版本;
//是的:
公共列表版本{get;set;}
也许这有助于某人…我遇到了这个错误,我的情况很简单,只需将绑定到的字符串从private设置为public即可
粗心地写了我的支持字段。在看了Shahid的答案后,我注意到在我的例子中,我将DataContext
设置为Loaded
事件中的引用,而不是构造函数中的引用。将其移动到构造函数解决了这个问题。public Window()
public Window()
{
this.DataContext = this;
InitializeComponent();
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>
{
this.DataContext=this;
初始化组件();
}
公共字符串名称{get;}
//xaml
属性Name
应该是public
和{get;}
您是否也可以发布从输出窗口获得的错误?我已将错误消息文本添加到上述发布中。您必须设置DataContext以反映当前用户控件。创建绑定时,它会查看IncrementTex内部