Cur*_*tis 44 c# wpf xaml binding
我正在敲打我的桌面上的这个绑定错误..我检查了几个BindingExpression路径错误的帖子,看不到任何与我的情况有关的东西.
无论如何,我有一个名为的自定义控件IncrementingTextBox.我试图在用户'检查' CheckBox上面的时候禁用它.
我对该CheckBox IsChecked属性的绑定工作正常,并在它应该发射时触发.它正在UseSensorLengthConfigurationModel上正确设置属性.
但是,对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"/>
Run Code Online (Sandbox Code Playgroud)
这是我的ConfigurationModel的一个片段:
public bool DontUseSensorLength
{
get { return !UseSensorLength; }
}
public bool UseSensorLength
{
get { return _useSensorLength; }
set
{
_useSensorLength = value;
OnPropertyChanged("UseSensorLength");
OnPropertyChanged("DontUseSensorLength");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我在运行应用程序时在输出窗口中收到的错误消息:
System.Windows.Data错误:40:BindingExpression路径错误:'object'''IncrementingTextBox'(Name ='video_length_textbox')'上找不到'ConfigurationModel'属性.BindingExpression:路径= ConfigurationModel.DontUseSensorLength; DataItem ='IncrementingTextBox'(Name ='video_length_textbox'); target元素是'IncrementingTextBox'(Name ='video_length_textbox'); target属性是'IsEnabled'(类型'Boolean')
请记住,'UseSensorLength'属性绑定工作正常,但'DontUseSensorLength'绑定导致上述'BindingExpression路径错误'.
Rac*_*hel 111
我最近写了一些关于如何阅读绑定错误的其他SO 回答,以便更有意义.总而言之,在冒号和分号的错误消息中添加换行符,并从下往上读取它.
您的错误消息是:
这可以从下往上阅读:
绑定失败是IsEnabled类型元素IncrementingTextBox(名为video_length_textbox)的属性.
元素的DataItem(DataContext)是IncrementingTextBox名为video_length_textbox 的类型的对象
它试图找到的绑定表达式是 ConfigurationModel.DontUseSensorLength
绑定所带来的问题是ConfigurationModel在数据上下文对象上找不到该属性IncrementingTextBox
因此,您DataContext的"video_length_textbox"设置为自身,并且您的IncrementingTextBox类没有调用的公共属性ConfigurationModel
因为我没有看到你设置DataContext你IncrementingTextBox在你的XAML的任何地方,检查出的代码为你的IncrementingTextBox类.最可能的情况是您在构造函数中将DataContext设置为自身
this.DataContext = this;
Run Code Online (Sandbox Code Playgroud)
或XAML
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Run Code Online (Sandbox Code Playgroud)
小智 64
我有同样的问题,因为我从中提取数据的对象类没有得到; 并设定; 在它的属性.
这不起作用:
public string Name;
Run Code Online (Sandbox Code Playgroud)
但这有效:
public string Name{ get; set; }
Run Code Online (Sandbox Code Playgroud)
public Window()
{
InitializeComponent();
this.DataContext = this;
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>
Run Code Online (Sandbox Code Playgroud)
属性Name应该是public和{ get; }
我有过类似的经历,组合框上的 ItemsSource 绑定不起作用。
在我的情况下,这是一个小错误,但在启用跟踪消息之前很难跟踪。
我只是忘记把我的 List 变成一个属性 :(
// NOPE:
public List<string> Versions;
// YEP:
public List<string> Versions { get; set; }
Run Code Online (Sandbox Code Playgroud)
也许这有助于某人...