【问题标题】:Wpf combobox text property binding problemwpf组合框文本属性绑定问题
【发布时间】:2010-11-11 04:30:33
【问题描述】:

我正在尝试绑定到 IsEditable 属性设置为 true 的组合框文本。我的视图模型中有一个绑定到文本的属性。

我想验证在组合框的文本中输入的文本,并限制用户输入的一些值。所以有些是允许的,有些是不允许的,这些需要将组合框设置回它的旧值。

我在视图模型中执行此操作,并且我尝试将视图模型中的文本属性显式设置为旧值,或者只是忽略更改并提出属性已更改,但对于我的生活来说,它不会将文本刷新回旧值。

这是因为组合框是可编辑的,并且它在组合框的文本中具有文本插入符号和焦点。

基本上,当我在编辑过程中限制组合框中的某些输入时,我希望它刷新回以前的文本。任何人都有任何想法通过 ViewModel 将文本重置回其旧值。提前致谢!

【问题讨论】:

    标签: wpf binding combobox


    【解决方案1】:

    感谢您的回复。但是我永远无法让它工作,我制作了自己的 UserControl,它包含一个覆盖在组合框上的文本框,并操纵这两个控件以满足我的需要。解决一个简单的问题还有很长的路要走,但它最终会奏效。

    【讨论】:

      【解决方案2】:

      我认为这是因为 WPF 中的一个“错误”在您更改设置器中的属性值时不会刷新 UI。您可以通过实现 IdentityConverter 来解决此问题,该 IdentityConverter 会强制 UI 按照 this arcticle 进行刷新。

      【讨论】:

      • 我尝试了这里的建议,但令我懊恼的是,它仅在文章中所述控件失去焦点时才有效。这不是我需要的行为。
      【解决方案3】:

      您要绑定的视图模型属性是否创建为 DependencyProperty?这可能是你面临的问题Two-way binding in WPF

      如果您不想创建 Dependency 属性,则需要实现 INotifyProperty changed 并在 Property changed 事件中手动强制更新。

      【讨论】:

      • 我使用了依赖属性并且 INotifyProperty 已更改。两者都没有工作。组合框的 Text 属性上的绑定是 TwoWay。
      • 您在哪里执行用户输入的验证?
      • 我已经在 dep prop 的 onpropertychanged 回调上完成了并且我已经在视图模型中 text 属性的 setter 中完成了它,调用了另一个方法来验证文本。
      • 你可以做的是为绑定创建一个Convertor类(实现IValueConvertor),在Convert方法中检查提供的值,如果你不喜欢它返回Binding.DoNothing();跨度>
      • “可以尝试”可能是更好的措辞:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2017-09-15
      • 2016-12-10
      • 1970-01-01
      • 2014-11-24
      • 2022-01-22
      相关资源
      最近更新 更多