wpf - 如何撤消由绑定(bind)引起的 TextBox 的文本更改?

标签 wpf textbox wpf-controls binding

我有一个 TextBox我绑定(bind)了一个字符串,如果我现在手动编辑文本,我将能够通过 TextBox.Undo() 撤消这些更改,但是如果我更改了字符串并且更新了 TextBox 的文本,我将无法撤消这些更改并且 TextBox.CanUndo属性将始终为 false .
我想这可能与完全替换文本而不是修改它有关。

关于如何让它发挥作用的任何想法?

最佳答案

我遇到了同样的问题(需要在 Enter 时接受输入并在 Escape 时恢复为原始值)并且能够以这种方式处理它:

  • 设置 UpdateSourceTrigger您的TextBox.Text绑定(bind)到 Explicit .
  • 拉手KeyDown TextBox 的事件并将以下代码放入其中:
    if (e.Key == Key.Enter || e.Key == Key.Escape)
    {
      BindingExpression be = ((TextBox)sender).GetBindingExpression(TextBox.TextProperty);
    
      if (e.Key == Key.Enter)
      {
        if (be != null) be.UpdateSource();
      }
      else if (e.Key == Key.Escape)
      {
        if (be != null) be.UpdateTarget(); //cancels newly supplied value and reverts to the original value
      }
    }
    

  • 我发现这个解决方案非常优雅,因为它也可以在 DataTemplates 中使用。例如,在我的例子中,我使用它来允许对 ListBox 项目进行就地编辑。

    关于wpf - 如何撤消由绑定(bind)引起的 TextBox 的文本更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476282/

    相关文章:

    WPF:将属性更改连接到动画?

    c# - WPF设计 View 和运行之间的区别

    c# - 闪烁按钮(非常基本)

    c# - 为什么 DataTemplate.LoadContent() 不遵守模板定义的触发器?

    wpf - 如何以编程方式禁用 Windows 8 Charms 栏?

    c# - 将文本框绑定(bind)到属性

    excel - 突出显示用户表单文本框中的文本

    c# - Silverlight:无法在文本框中输入俄语文本

    c# - 在 WPF 的 MVVM 模式中使用 Tabcontrol

    c# - 如何获取wpf datagrid中DatagridTemplateColumn的单元格内容?