我正在敲打我的桌面上有这个绑定错误..我检查了BindingExpression
路径错误的几个帖子,看不到任何与我的情况有关的内容。
无论如何,我有一个名为IncrementingTextBox
的自定义控件。我试图在用户“检查”其上方的CheckBox
时禁用它。
我对CheckBox
IsChecked
属性的绑定工作正常,并且应该在它应该触发时触发。它正在ConfigurationModel上正确设置UseSensorLength
属性。
但是,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路径错误: 'object'上找不到'ConfigurationModel'属性 ''IncrementingTextBox'(Name ='video_length_textbox')'。 BindingExpression:路径= ConfigurationModel.DontUseSensorLength; DataItem ='IncrementingTextBox'(Name ='video_length_textbox');目标 element是'IncrementingTextBox'(Name ='video_length_textbox');目标 property是'IsEnabled'(类型'Boolean')
请记住,'UseSensorLength'属性绑定工作正常,但'DontUseSensorLength'绑定导致上述'BindingExpression路径错误'。
答案 0 :(得分:100)
我最近写了一些关于如何阅读绑定错误以使其更有意义的SO answer。总而言之,在冒号和分号的错误消息中添加换行符,并从下往上阅读。
您的错误消息是:
这可以从下往上阅读:
绑定失败是IsEnabled
类型元素的IncrementingTextBox
属性(名为video_length_textbox)。
元素的DataItem
(DataContext
)是IncrementingTextBox
类型的对象,名为video_length_textbox
它试图找到的绑定表达式为ConfigurationModel.DontUseSensorLength
绑定带来的问题是在数据上下文对象ConfigurationModel
上找不到IncrementingTextBox
属性
因此,您的DataContext
for“video_length_textbox”设置为自身,而您的IncrementingTextBox
类没有名为ConfigurationModel
的公共属性
由于我没有看到您在XAML中的任何位置为DataContext
设置IncrementingTextBox
,请查看IncrementingTextBox
课程的代码。最可能的情况是您在构造函数
this.DataContext = this;
或XAML
DataContext="{Binding RelativeSource={RelativeSource Self}}"
答案 1 :(得分:59)
我有同样的问题,因为我从中提取数据的对象类没有得到;并设定;关于它的属性。
这不起作用:
public string Name;
但这有效:
public string Name{ get; set; }
答案 2 :(得分:2)
我遇到了同样的问题,在我的情况下,我使用的是bool
而不是Boolean
。一旦我改变它,它就像预期的那样工作。
答案 3 :(得分:2)
很少要检查
1.在构造函数
中的InitializeComponent之前对属性中的值进行分配 public partial class SampleClass: UserControl
{
public SampleClass()
{
ScenarioHeight = System.Windows.SystemParameters.WorkArea.Height - 350;
InitializeComponent();
}
public double ScenarioHeight { get;set;}
2.如果是usercontrol,请确保在绑定
中添加userControl作为Element <ScrollViewer Name="sv" Height="{Binding Path=ScenarioHeight, ElementName=ucSampleClass}" >
答案 4 :(得分:2)
当您以前尝试使用XAML属性绑定不可访问或不存在的Enumerable实例时,也可能发生此错误<ItemsSource>
当您使用正确的值更正ItemsSource
时,XAML不会自动重新收集项目集合。
因此,当我使用ListBox
UI - 列表表示时,我在属性中遇到了这个问题:
删除集合中的所有项目并更正ItemSource
值是关键。
答案 5 :(得分:2)
def include_docs_urls(
title=None, description=None, schema_url=None, urlconf=None,
public=True, patterns=None, generator_class=SchemaGenerator,
authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES,
permission_classes=api_settings.DEFAULT_PERMISSION_CLASSES,
renderer_classes=None):
# this is the declaration of the function
属性from rest_framework.permissions import AllowAny
urlpatterns = [
path('docs/', include_docs_urls(title='Great Soft Uz', permission_classes=[AllowAny, ], authentication_classes=[]))
]
应为public Window()
{
this.DataContext = this;
InitializeComponent();
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>
和Name
答案 6 :(得分:1)
我有类似的经历,Combobox上的ItemsSource绑定无效。
在我的情况下,这是一个小错误,但在启用跟踪消息之前很难跟踪。
我只是忘了把列表变成一个属性:(
// NOPE:
public List<string> Versions;
// YEP:
public List<string> Versions { get; set; }
也许这可以帮助某人...
答案 7 :(得分:0)
查看Shahid的答案后,我发现我在DataContext
事件中而不是在构造函数中将Loaded
设置为引用。将其移至构造函数即可解决此问题。
答案 8 :(得分:-1)
我收到此错误,我的情况很简单,就像将要绑定的String设置为从私有到公共。
毫不留情地写我的支持领域。