C# 在行为中动态更改wpf绑定属性时,AssociatedObject绑定源为null
我想在资源文件中为textbox创建一个样式,我想在其中将每个textbox的NotifyOneError属性设置为true 我也在用同样的行为,但我不能这么做 我已经尝试过的代码是:C# 在行为中动态更改wpf绑定属性时,AssociatedObject绑定源为null,c#,wpf,xaml,C#,Wpf,Xaml,我想在资源文件中为textbox创建一个样式,我想在其中将每个textbox的NotifyOneError属性设置为true 我也在用同样的行为,但我不能这么做 我已经尝试过的代码是: BindingExpression be = this.AssociatedObject.GetBindingExpression(TextBox.TextProperty); if (be!=null) { Binding b = be.ParentBinding; Binding newBi
BindingExpression be = this.AssociatedObject.GetBindingExpression(TextBox.TextProperty);
if (be!=null)
{
Binding b = be.ParentBinding;
Binding newBinding = new Binding()
{
Source = b.Source,
Path = b.Path,
Mode = b.Mode,
NotifyOnValidationError = true
};
BindingOperations.ClearBinding(this.AssociatedObject, TextBox.TextProperty);
BindingOperations.SetBinding(this.AssociatedObject, TextBox.TextProperty, newBinding);
BindingExpression bex = this.AssociatedObject.GetBindingExpression(TextBox.TextProperty);
if (bex != null)
{
bex.UpdateTarget();
}
}
但不幸的是,我现在在文本框中没有看到任何值。当我调试它时,我发现源属性为null,同时从旧绑定复制它(参考上面的代码)
另外,如果有人能给我一个解决方案,我也可以在xaml中使用它。我忘了提到,已经为各个xaml文件中的每个文本框设置了绑定。我想做的是,如果尚未在绑定中设置NotifyOnValidationError,我想确保它设置为true。
newXPath
是否是oldBinding.Source
上的有效属性?我想不是。您可能需要将现有绑定的newBinding.Path=oldBinding.Path
设置为绑定到同一个属性,或者最好将现有绑定的NotifyOnValidationError
和validatesonceptions
属性更改为true
好的,我尝试了您告诉我的第一个选项,已将path属性设置为oldBinding。仍然没有在文本框中显示值。第二个选项是不允许的,我得到了一个错误,当现有绑定已经设置时,无法更改它。