59

我用这个绑定错误把我的头撞在我的桌子上。我已经检查了几个帖子的BindingExpression路径错误并且看不到任何适合我的情况的东西。

无论如何,我有一个名为IncrementingTextBox. 每当用户“检查”上面的内容时,我都会尝试禁用CheckBox它。

我有一个CheckBox IsChecked工作正常的属性绑定,并且在它应该触发的时候触发。它正确设置UseSensorLength了 ConfigurationModel 上的属性。

但是,IncrementingTextBox IsEnabled属性上的绑定会导致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");
   }
}

这是我在运行应用程序时在输出窗口中收到的错误消息:

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 路径错误”。

4

9 回答 9

135

我最近写了一些关于如何阅读绑定错误的其他 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)。

  • 元素的DataItem( DataContext) 是一个IncrementingTextBox名为 video_length_textbox的对象

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

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

因此,您的DataContextfor "video_length_textbox" 设置为自身,并且您的IncrementingTextBox类没有名为的公共属性ConfigurationModel

由于我没有看到您在 XAML 中DataContext为您的任何位置设置,请查看您的课程的代码。最可能的情况是您在构造函数中将 DataContext 设置为自身IncrementingTextBoxIncrementingTextBox

this.DataContext = this;

或 XAML

DataContext="{Binding RelativeSource={RelativeSource Self}}"
于 2013-04-23T16:20:16.803 回答
97

我遇到了同样的问题,因为我从中提取数据的对象类没有得到;并设置;关于它的属性。

这没有用:

public string Name;

但这有效:

public string Name{ get; set; }
于 2016-04-27T18:00:13.943 回答
8

我有类似的经历,Combobox 上的 ItemsSource 绑定不起作用。

就我而言,这是一个小错误,但在我启用跟踪消息之前很难跟踪。

我只是忘记将我的列表变成一个属性:(

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

也许这可以帮助某人...

于 2019-01-08T09:03:27.710 回答
4
public Window()
{
      this.DataContext = this;
      InitializeComponent();
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>

属性Name应该是public{ get; }

于 2020-01-20T22:28:39.837 回答
2

几件事情要检查

1.在构造函数中InitializeComponent之前的属性中赋值

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


    }

    public double ScenarioHeight  { get;set;}

2.如果它是用户控件,请确保将 userControl 添加为绑定中的元素

 <ScrollViewer Name="sv" Height="{Binding Path=ScenarioHeight, ElementName=ucSampleClass}" >
于 2017-03-22T22:10:06.367 回答
2

我遇到了同样的问题,就我而言,我使用bool的是Boolean. 我一更改它,它就按预期工作。

于 2017-03-17T13:07:24.097 回答
2

当您之前尝试使用 XAML 属性绑定不可访问或不存在的 Enumerable 实例时,也可能会发生此错误<ItemsSource>

当您ItemsSource使用正确的值更正 时,XAML 不会自动重新初始化项目集合。

因此,当我使用ListBoxUI - 列表表示时,我在属性中遇到了这个问题:

在此处输入图像描述

删除集合中的所有项目并更正ItemSource价值是关键。

于 2018-03-11T18:58:46.277 回答
1

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

于 2019-12-30T19:01:44.897 回答
-1

我遇到了这个错误,我的情况就像将我绑定的字符串从私有设置为公共一样简单。

写我的支持字段的粗心错误。

于 2019-07-17T18:39:41.440 回答