Я ударяю головой о стол, с этой ошибкой привязки. Я проверил несколько сообщений об ошибке пути 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.
У меня была та же проблема, и в моем случае я использовал bool вместо Boolean. Как только я его сменил, он работает, как ожидалось.
Эта ошибка может также возникнуть, если вы ранее пытались связать недоступный или несуществующий экземпляр Enumerable, используя свойство XAML <ItemsSource>
Когда вы исправляете ItemsSource с правильным значением, XAML не делает
Поэтому, когда я использовал представление списка ListBox UI-list, я столкнулся с этим в свойствах:
Удаление всех элементы в коллекции и исправление значения ItemSource были ключевыми.
Немного вещей, чтобы проверить
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}" >
У меня была такая же проблема, потому что класс объекта, из которого я вынимал данные, не получил; и установить; по его свойствам.
это не сработало:
public string Name;
, но это сработало:
public string Name{ get; set; }