WPF Error 40 BindingExpression path error: property not found on 'object'
Solution 1:
I wrote some other SO answer recently about how to read the binding errors so they make more sense. To summarize, add line breaks to your error message on the colons and semi-colons, and read it from the bottom up.
Your error message is:
- System.Windows.Data Error: 40 :
- BindingExpression path error: 'ConfigurationModel' property not found on 'object' ''IncrementingTextBox' (Name='video_length_textbox')'.
- BindingExpression:Path=ConfigurationModel.DontUseSensorLength;
- DataItem='IncrementingTextBox' (Name='video_length_textbox');
- target element is 'IncrementingTextBox' (Name='video_length_textbox');
- target property is 'IsEnabled' (type 'Boolean')
This can be read from the bottom up as:
The binding failing is the
IsEnabled
property of an element of typeIncrementingTextBox
(named video_length_textbox).The
DataItem
(DataContext
) of the element is an object of typeIncrementingTextBox
named video_length_textboxThe binding expression it is trying to find is
ConfigurationModel.DontUseSensorLength
And the problem the binding is having is that the
ConfigurationModel
property is not found on the data context objectIncrementingTextBox
So your DataContext
for "video_length_textbox" is set to itself, and your IncrementingTextBox
class does not have a public property called ConfigurationModel
Since I don't see you setting the DataContext
for your IncrementingTextBox
anywhere in your XAML, check out the code for your IncrementingTextBox
class. The most likely case is you are setting the DataContext to itself in either the Constructor
this.DataContext = this;
or the XAML
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Solution 2:
I had same problem because class of object from which I was pulling out data didn't have get; and set; on its properties.
this didn't work:
public string Name;
but this worked:
public string Name{ get; set; }
Solution 3:
I had a similar experience, the ItemsSource binding on a Combobox did not work.
In my case it was a minor mistake, but a difficult one to track until I enabled trace messages.
I simply forget to turn my List into a property :(
// NOPE:
public List<string> Versions;
// YEP:
public List<string> Versions { get; set; }
Maybe this helps someone...