我有一个简单的Converter
将“+”符号添加到输入的正数中TextBox
。当输入号码时,我想启动一些操作,但我不想等到TextBox
失去焦点:我想在用户输入文本时立即更新绑定。
a 的默认行为TextBox
是当用户离开该框时,绑定源会更新(UpdateSourceTrigger=LostFocus)。在这种情况下,我的转换器按预期工作,并且添加了+。但是,当我将其更改为以下内容时,+ 是never added.
<TextBox Text="{Binding Value, Converter={StaticResource PlusConverter}, UpdateSourceTrigger=PropertyChanged}" />
我可以想象我的 converter.Convert() 方法没有被调用是有充分理由的。我希望有以下行为:
- 当用户输入文本时,源会立即更新
- 当。。。的时候
TextBox
失去焦点,+ 被添加。
现在我正在寻找一种很好的但特别通用的方法来执行此操作(因为我的应用程序中有很多这样的文本框)。
到目前为止我还没能想出一个合适的解决方案。
同意 Kent B,您需要发布您的转换器代码。
我已经能够让第 1 部分与一个简单的转换器一起使用(我正在绑定第二个未转换的 TextBlock 以显示该值确实正在更新)。
然而,如果我理解你的第二部分,你就会试图得到TextBox的文本在失去焦点后用“+”更新。这有点棘手,我认为仅使用 IConverter 无法做到这一点。如果可以的话,我也很想知道答案。
您本质上要求的是带水印的输入行为,例如允许用户输入一些数据,并使其格式正确(在底层 DataBinding 和 UI 中)。最快/最肮脏的解决方案是处理文本框的 LostFocus,但由于您在整个应用程序中都使用它,因此这可能不可行。
您还可以考虑将 TextBox 包装在您自己的 UserControl 中。如果您查看 WPFToolkit 的 DatePicker 实现,它具有类似的行为:允许用户输入自由格式文本,然后将值自动转换为 DateTime(如果有效)并以本地化格式显示 DateTime。
HTH.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)