Я ударился головой о стол, с этой ошибкой привязки. Я проверил несколько сообщений об ошибке пути BindingExpression
и не вижу ничего, что работает с моей ситуацией.Ошибка WPF 40 BindingExpression path error: свойство не найдено в 'object'
В любом случае, у меня есть пользовательский элемент управления под названием IncrementingTextBox
. Я пытаюсь отключить его, когда пользователь «проверяет» CheckBox
над ним.
У меня есть привязка к объекту , который работает нормально и стреляет, когда это предполагается. Он правильно устанавливает свойство 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");
}
}
Вот сообщение об ошибке я получаю в моем окне вывода при запуске app:
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')
Помните, что привязка свойств UseSensorLength работает нормально, но t связывание «DontUseSensorLength» вызывает вышеупомянутую ошибку «BindingExpression path».
Можете ли вы опубликовать сообщение об ошибке, которое вы получаете из окна вывода? –
Я добавил текст сообщения об ошибке в вышеуказанную публикацию. – Curtis
Вы должны установить DataContext для отображения текущего пользовательского элемента управления. Когда вы создаете привязку, он ищет в DataContext 'IncrementingTextBox' значение' ConfigurationModel.DontUseSensorLength'. Вы должны использовать 'RelativeSource', подобный [this] (http://stackoverflow.com/a/11550721/1466627). –