Telerik RADGridView能否在没有任何代码的情况下以纯MVVM方式使用?

时间:2011-06-21 01:16:37

标签: silverlight mvvm telerik-grid

我正在使用Telerik的Silverlight RADGridView控件并尝试以纯MVVM方式实现它。我正在使用MVVMLight的EventToCommand将控件的事件传递给我的viewmodel。

特别是,我正在尝试处理AddingNewDataItem事件。

虽然MVVMLight的PassEventArgsToCommand工作正常,但我对参数所做的任何更改都不会传递回网格控件(特别是NewObject参数)。如果我在后面的代码中操作NewObject,一切正常。

有没有人有这方面的工作经验?截至目前,看起来Telerik只是'有点'支持MVVM,这是不幸的。

2 个答案:

答案 0 :(得分:2)

在后面的代码隐藏中使用代码意味着代码偏离了MVVM模式。只要代码的目的是操纵UI而不引用任何问题域数据,在代码隐藏中使用代码是完全合法的。实际上,将UI操作放在ViewModel中是错误的。

目前尚不清楚你想要完成什么,但如果你将GridViewRowEditEndedEventArgs的引用传递给你的ViewModel,那就是偏离了MVVM模式,因为ViewModel现在依赖于View实现。

在MVVM模式中,View'知道'ViewModel和ViewModel'知道'模型。但模型不依赖于或了解ViewModel,而ViewModel不依赖于或了解View。

如果要将GridViewRowEditEndedEventArgs引用传递给ViewModel,问题是如果/当您将视图更改为其他控件(如RadListBox,Infragistics网格控件或任何其他)时,ViewModel将停止正常运行。

您的陈述:

  

Telerik只有'有点'支持MVVM

不公平且不正确。

MVVM的目标不是从代码隐藏中消除代码。这是一种常见的误解。 MVVM的目标是提升可测试性并删除域名和域名。从背后的代码中模拟逻辑,作为良好的“关注点分离”实践的一部分。

当代码隐藏代码被简单地移动到名为SomethingSomethingViewModel的类时......不是MVVM。

答案 1 :(得分:0)

Eric,我正在使用Silverlight GridView控件和MVVMLight,并且能够让它成功运行。

我认为您的问题可能更多是对AddingNewDataItem事件的理解。如果您查看Adding New Entries的文档,您会看到

  

之前引发了AddingNewDataItem   显示新行。在这种情况下   处理程序初始化对象   必须添加并传递给   GridViewAddingNewEventArgs。

获得初始化对象后,您还需要处理RowEditEnded事件以提交或取消您所做的更改。同样,如果您查看Telerik文档,您将看到您可以通过GridViewRowEditEndedEventArgs(e.NewData)访问您在AddingNewDataItem事件中创建的对象。此外,当提交新项目时,它将自动添加到RadGridView的项目。