gpt4 book ai didi

wpf - (WPF) 将 OneWayToSource 与转换器绑定(bind)会导致立即异常

转载 作者:行者123 更新时间:2023-12-04 13:43:18 29 4
gpt4 key购买 nike

我在一个窗口中有一个 TextBox,我使用以下简单的转换器将其绑定(bind)到一个值:

public class TestConverter : MarkupExtension, IValueConverter {
public override object ProvideValue(IServiceProvider serviceProvider) {
return this;
}

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return "x";
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
return "y";
}
}

绑定(bind)本身的表现如下:
Binding bnd = new Binding(nm); // 'nm' is a string with the binding path which is just
// a property name of the future source object
bnd.Converter = new TestConverter();
bnd.Mode = BindingMode.OneWayToSource;
oj.Fe.SetBinding(TextBox.TextProperty, bnd); // <--- Exception occurs here

如果我删除转换器或将模式设置为 TwoWay,则不会引发异常。为什么会以其他方式引发异常,我该如何解决或至少解决该问题?

编辑:似乎必须在绑定(bind)之前在这种情况下提供数据上下文,以免引发异常。为什么会这样?

最佳答案

我相信您会收到该错误,因为您将 TextBox.TextProperty 绑定(bind)到 nm,但 TextBox.TextProperty 为空。使用双向绑定(bind)时,它必须首先将值从 nm 发送到 TextBox.TextProperty,将其设置为“x”,以便在尝试以另一种方式绑定(bind)时不再为空。删除转换器可能还会删除发现 TextBox.TextProperty 为空并产生异常的检查。

因此,如果您要添加该行:

oj.Fe.Text = "something";

甚至可能:
oj.Fe.Text = string.Empty;


oj.Fe.SetBinding(TextBox.TextProperty, bnd);

那你应该没问题。

编辑:
实际上,导致异常的不是 null 值,而是 null sourceType。

我使用反编译器进行了更深入的研究,看起来您得到的异常是因为 sourceType 为空。导致空引用异常的“IsValidValueForUpdate”函数仅在有转换器时运行,这解释了为什么在删除转换器时没有得到它。该代码是在转换回的过程中运行的,这解释了为什么它以“OneWayToSource”作为绑定(bind)模式发生。无论如何,它可能只是框架中的一个小错误,因此在绑定(bind)之前设置 datacontext 以提供 sourceType 似乎是一个很好的解决方法。

关于wpf - (WPF) 将 OneWayToSource 与转换器绑定(bind)会导致立即异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093157/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com