我因这种绑定错误而将头撞在桌子上。.我已经检查了多个贴子中的BindingExpression路径错误,看不到任何适合我情况的东西。
BindingExpression
无论如何,我有一个名为的自定义控件IncrementingTextBox。每当用户“检查”它CheckBox上面时,我都试图禁用它。
IncrementingTextBox
CheckBox
我对CheckBox IsChecked可以正常工作的属性进行绑定,并在应有的情况下将其触发。它UseSensorLength在ConfigurationModel上正确设置了属性。
IsChecked
UseSensorLength
但是,对IncrementingTextBox IsEnabled属性的绑定导致BindingExpression路径错误,因此根本不会更新。
IsEnabled
作为测试,我尝试在后面的代码中启用和禁用该控件,并且效果很好,但是似乎无法使Binding起作用。
这是我的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"/>
这是我的ConfigurationModel的一个片段:
public bool DontUseSensorLength { get { return !UseSensorLength; } } public bool UseSensorLength { get { return _useSensorLength; } set { _useSensorLength = value; OnPropertyChanged("UseSensorLength"); OnPropertyChanged("DontUseSensorLength"); } }
这是运行应用程序时在输出窗口中出现的错误消息:
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ IncrementingTextBox”(名称=“ video_length_textbox”)上找不到“ ConfigurationModel”属性。BindingExpression:Path = ConfigurationModel.DontUseSensorLength; DataItem =’IncrementingTextBox’(Name =’video_length_textbox’); 目标元素是“ IncrementingTextBox”(名称=“ video_length_textbox”);目标属性为“ IsEnabled”(类型为“布尔”)
请记住,“ UseSensorLength”属性绑定工作正常,但是“ DontUseSensorLength”绑定导致上述“ BindingExpression path error”。
我最近写了一些关于SO的其他答案,以了解如何读取绑定错误,从而使它们更有意义。总结一下,在冒号和分号上的错误消息中添加换行符,然后从下往上阅读。
您的错误消息是:
可以从下往上读为:
绑定失败是IsEnabled类型IncrementingTextBox(名为video_length_textbox)的元素的属性。
该DataItem(DataContext所述元件的)是类型的对象IncrementingTextBox命名video_length_textbox
DataItem
DataContext
它试图找到的绑定表达式是 ConfigurationModel.DontUseSensorLength
ConfigurationModel.DontUseSensorLength
绑定存在的问题是ConfigurationModel在数据上下文对象上找不到该属性IncrementingTextBox
ConfigurationModel
因此,您DataContext的“ video_length_textbox”设置为自身,并且您的IncrementingTextBox课程没有名为的公共属性ConfigurationModel
由于看不到您在XAML中DataContext的IncrementingTextBox任何位置设置的功能,因此请查看您的IncrementingTextBox类的代码。最可能的情况是您在任一构造函数中将DataContext设置为其自身
this.DataContext = this;
或XAML
DataContext="{Binding RelativeSource={RelativeSource Self}}"