【问题标题】:Can Telerik RADGridView be used without in pure MVVM fashion without any code behind?Telerik RADGridView 可以在没有任何代码的情况下以纯 MVVM 方式使用吗?
【发布时间】:2011-06-21 01:16:36
【问题描述】:

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

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

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

有没有人有过让这个工作的经验?截至目前,Telerik 似乎只有“有点”支持 MVVM,这很不幸。

【问题讨论】:

    标签: silverlight mvvm telerik-grid


    【解决方案1】:

    在代码隐藏中包含代码确实意味着代码背离了 MVVM 模式。只要代码的目的是操纵 UI 并且不引用任何有问题的域数据,在代码隐藏中包含代码是完全合法的。事实上,将 UI 操作放在 ViewModel 中是错误的。

    目前尚不清楚您要完成什么,但如果您将对 GridViewRowEditEndedEventArgs 的引用传递给您的 ViewModel,这与 MVVM 模式背道而驰,因为 ViewModel 现在依赖于 View 实现。

    在 MVVM 模式中,视图“了解”视图模型,视图模型“了解”模型。但 Model 不依赖或不知道 ViewModel,而 ViewModel 不依赖或不知道 View。

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

    您的声明:

    Telerik 只有“有点”支持 MVVM

    不公平且不正确。

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

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

    【讨论】:

      【解决方案2】:

      Eric,我正在将 Silverlight GridView 控件与 MVVMLight 一起使用,并且能够使其成功运行。

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

      AddingNewDataItem 之前提出 显示新行。在活动中 处理程序您初始化的对象 必须添加并将其传递给 GridViewAddingNewEventArgs。

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

      【讨论】:

      • 嗨,IsolatedStorage,我实际上对事件结构有很好的了解。问题在于,当我在后面的代码中处理事件(这违反了 MVVM 模型)时,我可以成功地操纵我的对象模型。但是,当事件由 ViewModel 类处理时,信息仅以一种方式传播 - 我获取参数,但所做的任何更改都不会传递回网格控件
      猜你喜欢
      • 2023-03-09
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      相关资源
      最近更新 更多