可移植类库中的WPF MVVM编程

时间:2015-08-18 05:43:32

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

这些天我正在使用.NET平台的WPFMVVM相关功能和工具开发一个新的c#项目。我对这种类型的应用程序开发完全不熟悉。在我开始学习像ICommandINotifyPropertyChanged之类的东西后,我注意到,当我正在挖掘这些类和命名空间System.Windows.Input时,我实际上正在远离可移植性。

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

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

远离可移植性是什么意思?

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

您能否指导我们在Portable类库中编程MVVM时应该考虑什么? MVVMPCL有什么共同之处?当他们的概念和功能彼此不安时?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您的可移植性与WPF无关。

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

Prism,Microsofts Practice&模式MVVM Framework是可移植的。适用于桌面,Windows Phone / Mobile,WPF,Silverlight和Xamarin。

您的观点并非易于携带。 Xamarin不久前发布了Xamarin Forms,它类似于WPF / Windows Phone开发,因为它使用XAML进行UI并支持数据绑定(因此也支持ICommand和ViewModel绑定)。

如果要开发MVVM应用程序,则不应使用旧的Xamarin UI系统。

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

如果他们这样做,则违反MVVM原则,您的代码将无法移植。在这种情况下,您必须重构代码并更好地理解MVVM。在没有引用WPF的情况下,可以使用ViewModel和Commands。