【问题标题】:Developing WPF software without MVVM在没有 MVVM 的情况下开发 WPF 软件
【发布时间】:2012-02-10 10:33:12
【问题描述】:

我们想开始开发一个中间桌面软件。 我们决定使用 WPF。 我们不想使用 MVVM 模式。 因为我们对MVVM不熟悉,也有时间限制。 没有MVVM模式开发WPF应用程序是真的吗(使用3层架构但没有MVVM) 虽然它的性能比 win 形式更好吗?

【问题讨论】:

  • WPF 应用程序 windows 应用程序,如果你的意思是 win forms 你应该这样写...
  • 不,WPF 仍然比 WinForms 慢。设计模式与此无关。
  • 如果没有一些 MVVM 帮助,您的 XAML 将很快变得一团糟......
  • Felice Pollano:我不明白,请您再描述一下
  • @FelicePollano 不要将绑定到数据上下文与 MVVM 混淆。 MVVM 需要将 View 和 ViewModel 分开,这并不总是需要。

标签: wpf mvvm


【解决方案1】:

在使用 WPF/Silverlight 时,您当然不必依赖 MVVM。

至于性能差异 - 它可能取决于您的编码风格,但是如果处理得当,差异应该不会很明显。

【讨论】:

  • 同意,遵守 MVVM 模式既不会自动导致良好的应用程序架构(尽管它有帮助),也不会阻止您创建良好的应用程序。然而,在开始编码之前,您应该熟悉 WPF 中的几个核心概念,尤其是数据绑定。在MSDN 中获得全面的介绍。
【解决方案2】:

你在使用 wpf 时不需要依赖 MVVM。正确使用 wpf 的真正关键是:

  • 使用命令而不是事件(您可能会在没有意识到的情况下这样做,但请检查以确保)
  • 使用数据绑定而不是直接从控件中获取值
  • 设置数据上下文并绑定到该上下文而不是绑定到后面的代码

MVVM 非常适合这两件事,但不是必需的。具体来说,MVVM 需要 3 层严格的关注点分离,这可以通过 MVP 轻松完成。

就性能而言,这实际上取决于运行应用的平台和编码风格。如果您在没有像样显卡的计算机上运行它,那么 winForms 可能会表现得更好,因为 wpf 可能会恢复到非常慢的软件渲染。如果您需要制作 3d 图形,那么 wpf 确实是您唯一的选择。

Someone else's recommendation to NOT use MVVM.

A codeproject example of how to do MVP with wpf

【讨论】:

  • 其实更像:用commands代替事件处理和数据绑定代替命令式更新。
  • @H.B.命令很好,但对于我所做的大部分工作来说,它们都是多余的。另外,如果您通过命令执行所有不是数据绑定的事情,那么数据绑定会取代一些事件处理晚上。
  • @H.B.嗯,我收回了。我使用绑定路由命令。不知道你为什么要对比绑定和命令。
  • 我不是在对比,当然你是绑定命令,但是命令的主要功能或多或少是为了替代事件处理。
  • 这是一个很好的答案,我必须添加一些注释,MVVM 是一个简单的模式,它有很多实现,你需要时间来选择和学习如何使用它的具体实现。但是模式本身非常简单,因为@mydogisbox 在这里描述了这些概念。但是我所做的只是从 Internet 的源代码中复制 RelyCommand 或 DelegateCommand 源代码。
【解决方案3】:

不需要使用 MVVM。 可以使用可视化设计器将 n'drop 控件拖放到设计表面上。 双击一个按钮并在代码隐藏中获取一个事件处理程序。我们不要忘记 通过 PropertyGrid 设置属性和事件处理程序。 一切都与 Winforms 中的完全一样。

没有 DataContext 数据绑定不起作用。 如果你想使用数据绑定,我看到的第一个例子设置了 Window 的 DataContext = this;在构造函数中。在这种情况下,窗口充当它自己的“ViewModel”。

您还可以将 MVVM 与 View-First 结合使用。无需 DI 或 IoC。

public class MyViewModel
{
}
public class MyWindow
{
    public MyWindow()
    {
        DataContext = new MyViewModel();
    }
}

当然,下一步是使用 Unity 实现 DI/IoC。

【讨论】:

  • 您可以在不设置DataContext 属性的情况下使用数据绑定,您只需指定相对源(即命名窗口并按名称引用窗口)。此外,如果您只想使用 winforms 中的事件处理程序,那么只需使用 winforms。最后,如果你没有将所有的 M - V - VM 分离出来,那么你就没有 MVVM,你还有别的东西。
【解决方案4】:

您可以通过 WinForm 和 WPF 开发任何应用程序,无需任何设计模式或应用程序模式。

【讨论】:

    【解决方案5】:

    MVVM 不是必需的,但它解决了表示逻辑的一些常见问题。例如,考虑 IsBusy ViewModel 属性。它是从任何具有持续时间的操作中设置的,并且可以从 Command.CanExecute 中使用,以向绑定控件发出信号,以在某些东西正在运行时禁用它们自己。一个用于逻辑和 UI 操作的属性。你可以考虑更多这样的例子来引导你走向 MVVM。重要的是绑定提供的内容,而不是其自身的模式。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 2014-07-09
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多