WPF MVVM编程在可移植类库



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

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

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

放弃可移植性是什么意思?

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

您能指导我在可移植类库中编程MVVM时应该考虑什么吗?MVVMPCL有什么共同之处?当他们的概念和功能不一致时?

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

您的可移植性与WPF无关。

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

Prism, microsoft Practice &;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的情况下使用ViewModels和Commands是完全可能的。

最新更新