如何在MVVM中处理Wpf DataGrid CellEditEnding事件?

时间:2010-09-18 09:10:54

标签: wpf mvvm datagrid

MVVM不允许代码隐藏,因此事件处理。 那么什么是MVVM通知单元格被更改的方式呢?

5 个答案:

答案 0 :(得分:1)

这是一个非常合法且显而易见的问题,因为MVVM存在非常合理的解决方案。我想有人会把它标记下来,因为之前可能已经有无数次问过了。

我知道在.Net4中有内置的功能。我被困在.Net3.5所以我使用WPF工具包中的CommandReference类,将视图中的事件转换为viewmodel中的命令。

答案 1 :(得分:0)

您需要处理CellEditEnding事件吗?是否有可能在绑定到单元格的属性的setter中执行代码?

答案 2 :(得分:0)

因为这个问题从未有过答案;你想要的是一个“命令事件”实现。基本上,它会捕获您选择的事件,并在您的ViewModel上调用ICommand实现。

摘要已经回答here(请查看Derek Beattie的回答)。

答案 3 :(得分:0)

我被困在这里。但是 NVM 的上述评论终于解决了我的担忧。谢谢!

如果您只是为了做一些纯粹的UI事情而在后面添加一些代码,那就没问题了。

如果您需要使用事件处理程序将代理行为添加到DataGrid中。以最简单的方式进行。只是不要与那里的Model / ViewModel / Data类交互,而只能与senderEventArgs交互。我将以这种方式在后面的代码中这样做,而Microsoft并没有提出更好的建议。

答案 4 :(得分:-1)

“MVVM不允许代码隐藏,因此事件处理。”

糟糕!有问题。

MVVM阻止代码落后,这是真的,但只有当某些事情可以通过Xaml合理地完成时。任何有线索的人从来没有说过“你不能代码落后”。

有时候处理活动是实现目标的最简单,最好的方法。在那种情况下,拥抱它,解决你的问题,继续前进。有时甚至无法在XAML中实现您的目标。在这些情况下,将视图逻辑抛出到视图的代码隐藏中并继续前进。

维护MVVM的架构目标(层之间的关注点分离)比严格遵守经验法则(例如避免代码隐藏)更重要。如果没有做出区分,你错过了树林。