代码之家  ›  专栏  ›  技术社区  ›  John Laffoon

强制WPF提交对焦点元素的更改

  •  7
  • John Laffoon  · 技术社区  · 14 年前

    我正在和VS2010,WPF和EF合作。我已经通过将一个实体从数据源工具窗口中拖动来在窗口上放置控件。我使用了“详细信息”设置,因此我的实体由几个标签和文本框表示。我还添加了一个带有以下代码的按钮:

    _context.SaveChanges();
    

    当我编辑数据时,无论哪个文本框具有焦点,其更改都不会提交回数据库。其他的一切都很好。如果我在点击保存按钮之前将焦点转移到另一个元素,它也会提交。我在数据报上也经历过同样的事情。

    我知道我遗漏了一些简单的东西,但我能理解。对我遗漏的东西有什么想法吗?

    谢谢!

    2 回复  |  直到 12 年前
        1
  •  12
  •   Abe Heidebrecht    14 年前

    这是因为文本框的默认绑定updateSourceTrigger是lostFocus。如果修改所有绑定以将其设置为propertychanged,则它将按预期工作:

    <TextBox Text="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged}" />
    
        2
  •  3
  •   Sgierek106    12 年前

    我只是在尝试以编程方式设置数据绑定文本框的值时遇到了同样的问题,但是Abe的建议不适用于我们的设置(它导致了一些不稳定的验证行为)。

    以下是我的工作方式:

    TextBox tb = (TextBox)this.FindName("TargetTextBox");
    tb.Text = "1234";
    tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();