这些天我正在使用.NET平台的WPF
和MVVM
相关功能和工具开发一个新的c#项目。我对这种类型的应用程序开发完全不熟悉。在我开始学习像ICommand
和INotifyPropertyChanged
之类的东西后,我注意到,当我正在挖掘这些类和命名空间System.Windows.Input
时,我实际上正在远离可移植性。
在我坚持MVVM
之前,我曾经为我的应用程序的业务层创建一个可移植的类库。
来自MVVM
的这些PresentationCore.dll
类是否在Xamarin android,iOS和mac等其他平台上得到了很好的支持?如果我在可移植类库中使用ICommand
,CommandManager
和其他类,我是否也可以在另一个提到的平台中使用已实现的库?
远离可移植性是什么意思?
例如,我们想要开发一个应该可移植到Windows和Android平台的应用程序。当我实现ICommand
时,我只能使用带有WPF
控件的命令,虽然我可以轻松地在xamarin android应用程序中的按钮的单击事件处理程序中调用该方法。所以在这个例子中,ICommand在Xamarin android应用程序中是无用的。
您能否指导我们在Portable类库中编程MVVM
时应该考虑什么? MVVM
和PCL
有什么共同之处?当他们的概念和功能彼此不安时?
答案 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。