MVVM或不是MVVM的问题

时间:2009-11-20 14:40:18

标签: wpf mvvm drag-and-drop

我正在重写基于Windows窗体的应用程序,我将使用WPF。 该应用程序在非常图形化的环境中严重依赖拖放技术。通过将元素拖动到网格上,移动它们,右键单击设置属性等来使用“设计”报告等,所有这些都保存到数据库中。还可以通过绘制流程图来控制程序流程,通过路由和决策制作,全部绘制在表单上,​​然后再保存到数据库中。

MVVM是否适用于这种应用,或者我是否试图在方孔中安装圆形钉。

你的想法非常适合。

5 个答案:

答案 0 :(得分:24)

我的看法是使用MVVM,但不是虔诚的。

我的意思是,在您的视图中使用模型,但在需要时也会使用一些代码(拖放,双击)。找到一个有助于您发展的平衡,而不会让您疯狂。

答案 1 :(得分:5)

MVVM非常适合WPF。你能用WPF和MVVM进行拖放吗?你当然可以。尝试搜索“WPF拖放行为”

答案 2 :(得分:3)

使用MVVM有两个很好的理由:

  1. 它可以帮助您生成业务逻辑 和数据访问代码更多 容易进行单元测试
  2. 只需要很少的额外努力 你的用户体验应该很容易修改 在Blend
  3. 正如几张海报所提到的,任何与UX相关的事件都可以在代码隐藏中处理,但您应该通过View Models公开和访问(读取和写入)数据,以便在视图中轻松绑定。

    至于我在#2中提到的额外工作,您可以轻松地向App对象添加静态属性,以确定应用程序是否正在运行而不是在Blend中打开的View。如果View在Blend中打开,则利用模拟数据而不是进行数据访问调用。下面是一些示例代码,用于检查Blend是否打开了View:

    if (Application.Current == null || Application.Current.GetType() == typeof(Application))
    {
        isInDesignMode = true;
    }
    else
    {
        isInDesignMode = false;
    }
    

    希望这有帮助。

答案 3 :(得分:1)

如果您正在寻找长期应用程序维护和可测试性,请确保您可以使用MVVM和WPF来完成这些工作。或者只是选择WPF。 MMVM初始学习曲线非常陡峭。

答案 4 :(得分:0)

像MVVM这样的模式是为了让生活更简单。因此,对于任何情况,如果您觉得这种模式给您带来了困难,请随意打破它或尝试别的东西。盲目跟随任何事情都无济于事。但无论如何MVVM还支持像Drag和Drop这样复杂的UI交互,我相信行为可以帮助你。在谷歌上搜索WPF拖动和放大放弃行为,你可以找到很多教程和代码来帮助你。