我在我的桌子上敲着我的头和这个绑定错误..我检查了BindingExpression
路径错误的几个贴子,看不到任何工作与我的情况。WPF错误40 BindingExpression路径错误:在'对象'上找不到属性
无论如何,我有一个自定义控件IncrementingTextBox
。我试图在用户'检查'上面的CheckBox
时禁用它。
我对CheckBox
IsChecked
IsChecked
属性工作正常,并正在发射,当它应该。它在ConfigurationModel上正确设置UseSensorLength
属性。
但是,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");
}
}
这是在运行时,我在我的输出窗口中收到错误消息应用:
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路径错误'。
你可以发布错误以及从输出窗口中获得吗? – 2013-04-23 15:59:55
我已将错误消息文本添加到上述发布。 – Curtis 2013-04-23 16:03:36
您必须设置DataContext以反映您当前的用户控件。当你创建绑定时,它会在'ConfigurationModel.DontUseSensorLength'值的'IncrementingTextBox'的DataContext里面查找。你必须使用类似于[this]的'RelativeSource'(http://stackoverflow.com/a/11550721/1466627)。 – 2013-04-23 16:08:14