NotifyPropertyChanged не привязывается к UI [dублировать]

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

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

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

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

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

Вот фрагмент из моего 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: свойство 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 (type 'Boolean')

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

33
задан 4 November 2016 в 19:17

4 ответа

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

0
ответ дан 15 August 2018 в 16:51

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

Когда вы исправляете ItemsSource с правильным значением, XAML не делает

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

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

0
ответ дан 15 August 2018 в 16:51

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

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}" >
0
ответ дан 15 August 2018 в 16:51

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

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

public string Name;

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

public string Name{ get; set; }
46
ответ дан 15 August 2018 в 16:51
  • 1
    Да, это не может быть поле, это должно быть свойство. Это была моя проблема. – seabass2020 7 June 2016 в 23:05
  • 2
    Спасибо, я вводил в заблуждение учебник. Должна быть собственностью. – Brian Ng 19 September 2016 в 11:07
  • 3
    У меня была такая же проблема, и я отсутствовал у публичного доступа! Иногда решение проще, чем кажется. – Korangar 24 October 2016 в 19:06
  • 4
    Ничего себе я потратил более 2 часов, пытаясь понять, почему, и это было потому, что у меня просто были поля в моем объекте, а не в свойствах. 0_о – iamwonder 3 May 2017 в 03:08
  • 5
    Я долго смотрел на ответ Рэйчел. Затем я читаю ваши и facepalm . Свойство ... не поле. – DonBoitnott 4 October 2017 в 00:04

Другие вопросы по тегам:

Похожие вопросы: