一尘不染

WPF错误40 BindingExpression路径错误:在“对象”上找不到属性

c#

我因这种绑定错误而将头撞在桌子上。.我已经检查了多个贴子中的BindingExpression路径错误,看不到任何适合我情况的东西。

无论如何,我有一个名为的自定义控件IncrementingTextBox。每当用户“检查”它CheckBox上面时,我都试图禁用它。

我对CheckBox
IsChecked可以正常工作的属性进行绑定,并在应有的情况下将其触发。它UseSensorLength在ConfigurationModel上正确设置了属性。

但是,对IncrementingTextBox IsEnabled属性的绑定导致BindingExpression路径错误,因此根本不会更新。

作为测试,我尝试在后面的代码中启用和禁用该控件,并且效果很好,但是似乎无法使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”。


阅读 1837

收藏
2020-05-19

共1个答案

一尘不染

我最近写了一些关于SO的其他答案,以了解如何读取绑定错误,从而使它们更有意义。总结一下,在冒号和分号上的错误消息中添加换行符,然后从下往上阅读。

您的错误消息是:

  • 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”(类型为“布尔”)

可以从下往上读为:

  • 绑定失败是IsEnabled类型IncrementingTextBox(名为video_length_textbox)的元素的属性。

  • DataItemDataContext所述元件的)是类型的对象IncrementingTextBox命名video_length_textbox

  • 它试图找到的绑定表达式是 ConfigurationModel.DontUseSensorLength

  • 绑定存在的问题是ConfigurationModel在数据上下文对象上找不到该属性IncrementingTextBox

因此,您DataContext的“
video_length_textbox”设置为自身,并且您的IncrementingTextBox课程没有名为的公共属性ConfigurationModel

由于看不到您在XAML中DataContextIncrementingTextBox任何位置设置的功能,因此请查看您的IncrementingTextBox类的代码。最可能的情况是您在任一构造函数中将DataContext设置为其自身

this.DataContext = this;

或XAML

DataContext="{Binding RelativeSource={RelativeSource Self}}"
2020-05-19