【问题标题】:WPF MVVM programming in a Portable Class Library可移植类库中的 WPF MVVM 编程
【发布时间】:2015-08-18 05:43:32
【问题描述】:

这些天我正在使用 .NET 平台的 WPF 和 MVVM 相关功能和工具开发一个新的 c# 项目。我对这种类型的应用程序开发完全陌生。在我开始学习 ICommand 和 INotifyPropertyChanged 之类的东西后,我注意到当我深入研究这些类和命名空间 System.Windows.Input 时,我实际上正在远离可移植性。

在我坚持使用MVVM 之前,我曾经为我的应用程序的业务层创建一个可移植的类库。

来自PresentationCore.dll 的这些MVVM 类是否在Xamarin android、iOS 和mac 等其他平台上得到很好的支持?如果我在可移植类库中使用ICommand、CommandManager 和其他类,我是否也可以在其他提到的平台中使用实现的库?

放弃便携性是什么意思?

例如,假设我们要开发一个可以移植到 windows 和 android 平台的应用程序。当我实现ICommand 时,我只能使用带有WPF 控件的命令,尽管我可以轻松地在xamarin android 应用程序中的按钮的单击事件处理程序中调用该方法。所以在这个例子中,ICommand 在 Xamarin android 应用程序中是无用的。

您能否指导我在可移植类库中对MVVM 进行编程时应该考虑什么? MVVM 和 PCL 有什么共同点?当他们的概念和功能相互不安时?

【问题讨论】:

  • 首先,见MVVMCross。
  • 视图通常不可移植,因为它们高度依赖于表示框架。恕我直言,因为视图模型应该以易于从视图中消费的方式公开数据和行为,所以视图模型也不可移植。但是,您可以将视图模型中的共享逻辑提取到 PCL,然后视图模型将只是非常薄的框架特定层。其中它会影响您的 MVVM 架构

标签: c# .net wpf mvvm portable-class-library


【解决方案1】:

简短回答:可移植性并不是 WPF 的主要设计目标之一。来自the MSDN site:“Windows Presentation Foundation (WPF) 的主要目标是帮助开发人员创建有吸引力且有效的用户界面”。更具体地说,它是为了帮助开发人员为 Windows 创建用户界面,因此是 W。考虑到视图模型和视图之间松散但高度隐含的耦合,这意味着 IMO 可移植性的最佳选择是在您的模型中,可能在您的 ORM 中。只要您坚持良好的 SOC 实践,这可能是您在不依赖 3rd 方解决方案的情况下获得的最佳实践……这通常会进一步降低可移植性,同时在其他地方增加很多麻烦。

【讨论】:

    【解决方案2】:

    您的可移植性与 WPF 无关。

    命令(ICommand 实现)和 ViewModels (INotifyPropertyChanged) 是可移植的,不依赖于 WPF 本身,至少在较新的 .NET 框架中不依赖。

    Prism, Microsofts Practice & Patterns MVVM 框架是可移植的。适用于桌面、Windows Phone/Mobile、WPF、Silverlight 和 Xamarin。

    您的视图并不意味着可移植。 Xamarin 不久前发布了 Xamarin Forms,它类似于 WPF/Windows Phone 开发,因为它使用 XAML 进行 UI 并支持数据绑定(因此也支持 ICommand 和 ViewModel 绑定)。

    如果你想开发一个 MVVM 应用程序,你不应该使用旧的 Xamarin UI 系统。

    为确保包含视图模型和命令的可移植库/程序集不允许有任何对 Presentation.dll 和其他 WPF 程序集的引用。

    如果这样做,您就违反了 MVVM 原则,您的代码将无法移植。在这种情况下,您必须重构代码并更好地理解 MVVM。绝对有可能在不参考 WPF 的情况下拥有 ViewModel 和命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多