Ошибка WPF 40 Ошибка BindingExpression path: свойство не найдено в ‘объекте’

Я ударяю головой о стол, с этой обязательной ошибкой. Я проверил несколько сообщений об BindingExpression пути BindingExpression и не вижу ничего, что BindingExpression с моей ситуацией.

Во всяком случае, у меня есть настраиваемый элемент управления под названием IncrementingTextBox . Я пытаюсь отключить его, когда пользователь «проверяет» CheckBox над ним.

У меня есть привязка к IsChecked CheckBox IsChecked который работает нормально и стреляет, когда он должен. Он правильно устанавливает свойство UseSensorLength в ConfigurationModel.

Однако привязка к свойству IncrementingTextBox IsEnabled вызывает BindingExpression пути BindingExpression и поэтому не обновляется вообще.

В качестве теста я попытался в коде, чтобы включить и отключить элемент управления, и он работает отлично, но я не могу заставить Binding работать над ним.

Вот fragment из моего xaml:

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

И вот fragment из моей 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: свойство ConfigurationModel не найдено в ‘object’ ” IncrementingTextBox ‘(Name =’ video_length_textbox ‘)’. BindingExpression: Path = ConfigurationModel.DontUseSensorLength; DataItem = ‘IncrementingTextBox’ (Name = ‘video_length_textbox’); целевой элемент – «IncrementingTextBox» (Name = ‘video_length_textbox’); target is is IsEnabled (тип «Boolean»)

Помните, что привязка свойства «UseSensorLength» работает нормально, но привязка «DontUseSensorLength» вызывает вышеупомянутую «ошибку пути BindingExpression».

Недавно я написал несколько других ответов SO о том, как читать ошибки привязки, поэтому они имеют больше смысла. Чтобы подвести итог, добавьте разрывы строк в сообщение об ошибке на двоеточиях и полуколонах и прочитайте их снизу вверх.

Ваше сообщение об ошибке:

  • Ошибка System.Windows.Data: 40:
    • Ошибка пути BindingExpression: свойство ConfigurationModel не найдено в ‘object’ ” IncrementingTextBox ‘(Name =’ video_length_textbox ‘)’.
    • BindingExpression: Path = ConfigurationModel.DontUseSensorLength;
  • DataItem = ‘IncrementingTextBox’ (Name = ‘video_length_textbox’);
  • целевой элемент – «IncrementingTextBox» (Name = ‘video_length_textbox’);
  • target is is IsEnabled (тип «Boolean»)

Это можно прочитать снизу вверх:

  • Ошибка привязки – это свойство IsEnabled элемента типа IncrementingTextBox (named video_length_textbox).

  • DataItem ( DataContext ) этого элемента является объектом типа IncrementingTextBox именем video_length_textbox

  • Выражение привязки, которое он пытается найти, – ConfigurationModel.DontUseSensorLength

  • И проблема, с которой связана привязка, заключается в том, что свойство ConfigurationModel не найдено в объекте контекста данных IncrementingTextBox

Таким образом, ваш DataContext для «video_length_textbox» установлен сам по себе, а ваш class IncrementingTextBox не имеет открытого свойства, называемого ConfigurationModel

Поскольку я не вижу, как вы устанавливаете DataContext для вашего IncrementingTextBox любом месте своего XAML, проверьте код для вашего classа IncrementingTextBox . Наиболее вероятный случай – вы устанавливаете DataContext для себя либо в конструкторе

 this.DataContext = this; 

или XAML

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

У меня была такая же проблема, потому что class объекта, из которого я вытаскивал данные, не получил; и установить; по его свойствам.

это не сработало:

 public string Name; 

но это сработало:

 public string Name{ get; set; } 

У меня была такая же проблема, и в моем случае я использовал bool вместо Boolean . Как только я его сменил, он работает так, как ожидалось.

Немного вещей, чтобы проверить

1.Ввести значения в свойствах до InitializeComponent в конструкторе

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

2.если его пользовательский контроль не забудьте добавить userControl как элемент в привязку

   

Эта ошибка также может возникнуть, если вы ранее пытались связать неansible или несуществующий экземпляр Enumerable, используя свойство XAML

Когда вы исправляете ItemsSource с правильным значением, XAML не выполняет автоматическую редилизацию коллекции элементов.

Поэтому, когда я использовал представление ListBox я столкнулся с этим в свойствах:

введите описание изображения здесь

Удаление всех элементов в коллекции и исправление значения ItemSource было ключевым.

  • Ошибка WPF: не удается найти управляющий элемент FrameworkElement для целевого элемента
  • Как связать WPF DataGrid с переменным числом столбцов?
  • Связывание WPF DataGrid с DataTable с использованием TemplateColumns
  • В .NET 4.0 привязка OneWayToSource
  • Пользовательское связующее устройство DateTime в Asp.net MVC
  • Как скрыть столбцы datagrid wpf в зависимости от свойства
  • ComboBox.SelectedValue не обновляется из источника привязки
  • Как сделать привязки в ItemContainerStyle в WinRT?
  • Пользовательское связующее устройство для объекта
  • WPF Binding - значение по умолчанию для пустой строки
  • Ввод текста заголовка WPF datagrid
  • Давайте будем гением компьютера.