XAML WPF错误40 BindingExpression路径错误:在“object”上未找到属性

aamkag61  于 2023-08-01  发布在  其他
关注(0)|答案(9)|浏览(197)

我的头撞在我的table上这个绑定错误。我已经检查了几个帖子的BindingExpression路径错误,看不到任何与我的情况工作。
我有一个自定义控件,名为IncrementingTextBox。我试图禁用它,每当用户'检查'的CheckBox以上。
我在CheckBoxIsChecked属性上有一个绑定,它工作正常,并且在应该触发的时候触发。它在ConfigurationModel上正确设置了UseSensorLength属性。
但是,IncrementingTextBoxIsEnabled属性上的绑定导致了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"/>

字符串
下面是我的ConfigurationModel的一个片段:

public bool DontUseSensorLength
{
    get { return !UseSensorLength; }
}

public bool UseSensorLength
{
   get { return _useSensorLength; }
   set 
   { 
      _useSensorLength = value; 
      OnPropertyChanged("UseSensorLength"); 
      OnPropertyChanged("DontUseSensorLength");
   }
}


以下是我在运行应用程序时在输出窗口中获得的错误消息:
系统.Windows.数据错误:40:BindingExpression路径错误:在“object”“IncrementingTextBox”(Name ='video_length_textbox')上未找到“ConfigurationModel”属性。BindingExpression:Path=ConfigurationModel.DontUseSensorLength; DataItem='IncrementingTextBox'(Name='video_length_textbox');目标元素为“IncrementingTextBox”(名称=“video_length_textbox ');目标属性为“IsEnabled”(类型为“布尔”)
请记住,“UseSensorLength”属性绑定工作正常,但“DontUseSensorLength”绑定导致了上述“BindingExpression路径错误”。

qyswt5oh

qyswt5oh1#

我最近写了一些其他的SO answer关于如何读取绑定错误,使它们更有意义。总而言之,在错误消息的冒号和分号处添加换行符,然后从下往上阅读。
您的错误消息是:

  • 系统.Windows.数据错误:四十:
  • BindingExpression路径错误:在“object”“IncrementingTextBox”(Name ='video_length_textbox')上未找到“ConfigurationModel”属性。
  • BindingExpression:Path=ConfigurationModel.DontUseSensorLength;
  • DataItem='IncrementingTextBox'(Name='video_length_textbox');
  • 目标元素为“IncrementingTextBox”(名称=“video_length_textbox ');
  • 目标属性为“IsEnabled”(类型为“布尔”)

这可以从底部向上读取为:

  • 绑定失败的原因是IncrementingTextBox类型的元素的IsEnabled属性(名为video_length_textbox)。
  • 元素的DataItemDataContext)是一个名为video_length_textbox的IncrementingTextBox类型的对象
  • 它试图查找的绑定表达式是ConfigurationModel.DontUseSensorLength
  • 绑定的问题是在数据上下文对象IncrementingTextBox上找不到ConfigurationModel属性。

因此,“video_length_textbox”的DataContext设置为自身,并且IncrementingTextBox类没有名为ConfigurationModel的公共属性
因为我没有看到您在XAML中的任何地方为IncrementingTextBox设置DataContext,所以请查看IncrementingTextBox类的代码。最有可能的情况是您在构造函数中将DataContext设置为自身

this.DataContext = this;

字符串
或XAML

DataContext="{Binding RelativeSource={RelativeSource Self}}"

rm5edbpk

rm5edbpk2#

我有同样的问题,因为我从对象中提取数据的类没有get;其属性;
这不起作用:

public string Name;

字符串
但这个很管用

public string Name{ get; set; }

yrdbyhpb

yrdbyhpb3#

我也有过类似的经历,组合框上的ItemsSource绑定不起作用。
在我的例子中,这是一个小错误,但在启用跟踪消息之前很难跟踪。
我只是忘了把我的列表变成一个属性:(

// NOPE:
public List<string> Versions;
// YEP:
public List<string> Versions { get; set; }

字符串
也许这能帮到某人。。

bkkx9g8r

bkkx9g8r4#

public Window()
{
      InitializeComponent();
      this.DataContext = this;
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>

字符串
属性Name应为public{ get; }

utugiqy6

utugiqy65#

我遇到了同样的问题,在我的情况下,我使用的是bool而不是Boolean。当我改变它,它的工作如预期。

8i9zcol2

8i9zcol26#

有几件事要检查
1.在构造函数中的InitializeComponent之前在属性中赋值

public partial class SampleClass: UserControl
{
    public SampleClass()
    {
        ScenarioHeight = System.Windows.SystemParameters.WorkArea.Height - 350;
        InitializeComponent();           

    }

    public double ScenarioHeight  { get;set;}

字符串
2.如果它是一个usercontrol,确保在绑定中添加userControl作为Element

<ScrollViewer Name="sv" Height="{Binding Path=ScenarioHeight, ElementName=ucSampleClass}" >

rqdpfwrv

rqdpfwrv7#

以前尝试使用XAML属性<ItemsSource>绑定不可访问或不存在的Enumerable示例时,也可能发生此错误
当您使用正确的值更正ItemsSource时,XAML不会自动重新初始化项集合。
因此,当我使用ListBox UI - list表示时,我在属性中遇到了这个问题:
x1c 0d1x的数据
删除集合中的所有项目并纠正ItemSource值是关键。

gblwokeq

gblwokeq8#

在查看了Shahid的答案后,我注意到在我的案例中,我将DataContext设置为Loaded事件中的引用,而不是在构造函数中。将其移动到构造函数解决了这个问题。

zhte4eai

zhte4eai9#

我得到了这个错误,我的情况很简单,只要将我绑定的String从private设置为public。
不小心写错了我的后台字段。

相关问题