【问题标题】:WPF DataGrid: Need Binding to Occur ASAPWPF DataGrid:需要尽快绑定
【发布时间】:2013-12-08 04:48:23
【问题描述】:

我遇到了这里提到的延迟绑定问题:

WPF DataGrid source updating on cell changed

当用户按下 Enter 时,我的源属性正在更新,但当她/他按下 Tab 时不会更新。

我在上面的帖子中找到了一个很好的建议:UpdateSourceTrigger=LostFocus(这是大多数向上点击的答案,顺便说一句),现在当用户水平或垂直离开单元格时,更新会根据需要完成。然而,一个问题仍然存在:在底行按 Enter

相关列定义如下:

<DataGridTextColumn Header="Quantity" 
                    Width="Auto" 
                    Binding="{Binding Path=Quantity, 
                              UpdateSourceTrigger=LostFocus}">
</DataGridTextColumn>

有没有类似的东西:UpdateSourceTrigger=EditEnded ??

后加法:

Explicit 选项似乎很有希望:

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger%28v=vs.100%29.aspx

我的事件处理程序只关心最后一行触发的事件并调用UpdateSource 方法。如果这是解决方案,我只需要知道在.UpdateSource()左侧放置什么。??

【问题讨论】:

  • Explicit 选项要求您手动通知更改。你试过PropertyChanged选项吗?如果我没记错的话,这是默认选项。
  • PropertyChanged 不是文本控件(例如 DataGrid 单元格)的默认选项。通知不会有问题,因为我已经在DataGrid_CellEditEnding 上有一个触发器(目前用于调试)。我所需要的只是重新调整它的用途,添加一个UpdateSource,但不知道在它前面添加什么。
  • 我的 Binding 经验是使用 MVVM。我将 ViewModel 设置为 DataContext 并让 OnPropertyChanged 的“魔法”发挥作用。你在使用 MVVM 吗?
  • 我正在使用ProperyChanged 魔法和几个包含组合框的列,并以非常奇特的方式定义。那些工作完美。我已经阅读了有关 MVVM 的信息,但对于我的简单 DataGrid 来说似乎有点过头了。
  • @TravisBanger 这真的很简单,无需过于复杂。这一切都归结为 1 - “不要在 WPF 的过程代码中操作 UI 元素,这就是 XAML 的用途”和 2 - “永远不要放置任何业务逻辑在代码背后”。

标签: c# wpf data-binding datagrid


【解决方案1】:

刚刚试过这个:

   <DataGridTextColumn Header="Quantity" 
                       Width="Auto" 
                       Binding="{Binding Path=Quantity,  UpdateSourceTrigger=PropertyChanged}">
   </DataGridTextColumn>

而且效果很好。绑定会在每次按键时更新,而不是在更改行时更新。

【讨论】:

  • 我在 Microsoft 链接中看到了这一点。想到浪费完美的 CPU 周期,我不寒而栗。 :-)
  • 好的,让我再试试PropertyChanged。我认为由于某种原因它对我不起作用......
猜你喜欢
  • 2015-07-02
  • 2015-10-30
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2015-01-26
  • 2013-10-14
相关资源
最近更新 更多