【发布时间】: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 选项似乎很有希望:
我的事件处理程序只关心最后一行触发的事件并调用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