【问题标题】:Userinput in Textbox overwrites Databinding文本框中的用户输入覆盖数据绑定
【发布时间】:2013-06-14 17:05:06
【问题描述】:

我有一个工作 OneWay DataBinding 从双 CLRPropertyTexttbox.Text. 我不使用 TwoWay 因为不是每个用户输入都是可以接受的。顺便说一句,我使用现有的 Command 来实现 ICommand 接口。

问题是,一旦用户在Textbox 中输入文本,Databinding 就会被破坏。

<TextBox Text="{Binding Path=myDouble, Converter={converter:DoubleToTextConverter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>

【问题讨论】:

  • 你所说的“被摧毁”是什么意思?用户输入将至少覆盖源属性值,直到源以另一种方式再次更新,这是预期的行为。
  • ICommand 与此有什么关系?此外,如果不是每个用户输入都有效,请使用Input Validation 的形式或忽略在属性setter 中应用新的value
  • @Pragmateek 使用“destroyed”是指当源属性更新时,文本框中的文本不会更新。 (在用户更改文本之前它确实工作得很好)
  • @Viv。该命令已在程序中多次使用。我只是为用户添加了一种新的使用方式。所以我已经有了 CanExecute 函数,用于测试输入。
  • 如果您在视图模型中使用带有双向绑定的字符串属性,使用 idataerrorinfo 验证输入并在将值设置为模型时强制转换为 double 会容易得多(这样您就可以摆脱转换器也是)。与 OneWay 模式绑定是“只读”的,因此您可以从源中更新文本。

标签: c# wpf data-binding command


【解决方案1】:

如果您不告诉他,您的程序应该如何知道用户输入是否可以接受?
要检查用户输入,您可以执行以下操作:

  • 使用DataValidation 仅接受某些输入。
  • 在用户进行输入的地方创建第二个 TextBox,如果没问题(在 ViewModel 中检查),则将其应用到第一个 TextBox 的绑定属性 myDouble

【讨论】:

  • 我的程序知道该值是否可以接受。 ICommand 有一个bool CanExecute(object Parameter){...} 方法。因此,如果值不正确,则“使用”命令的按钮在输入不可行时不可用。我的问题是谁让数据绑定工作,而不是输入验证。
  • 这不会按照你想要的方式工作。但你可以 f.e.使用标签显示值(绑定模式=OneWay)和文本框让用户键入值(绑定模式=OneWayToSource)。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 2019-11-10
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多