我开发了可在各种信息亭上运行的.NET / Winforms应用程序。这些应用通常是全屏和触摸控制的。我最近想使用WPF技术和MVVM设计模式。
这些应用程序的可行设计是,我有一个MainForm(窗口)在其上切换屏幕(UserControls)。因此,您只有一个“当前”屏幕,其中包含诸如上一个,下一个(如向导)之类的按钮。
大多数应用程序具有非常相似的逻辑。他们例如。需要从用户(一个屏幕)获取OrderNumber(PIN,任何文本..),通过卡处理付款(第二个屏幕),... 整个应用程序的不同之处在于GUI:图像,字体,颜色,显示器分辨率,按钮位置...
我的想法是编写典型的ViewModels并将其放在公共库中。然后,特定的应用程序将为这些ViewModel提供其视图。然后,在整个应用程序生命周期中,每个ViewModel都将绑定到一个特定的View。
示例:
库Common.dll
应用程序1:
应用程序2:
由于逻辑和GUI的分离,MVVM在我看来是满足我的要求的正确方法。
我的问题是如何在WPF中做到这一点,使用什么以及在哪里启发自己。我更喜欢没有第三方MVVM工具包的简单解决方案(如果合理且可行)。
一些子问题/想法:
如何指定将哪些View绑定到特定的ViewModel?使用一些ViewLocator?将“视图”属性放到ViewModel吗?
我更喜欢编写不与WPF耦合的Common.dll,因为将来可能会使用UWP应用程序(如果合理的话)。
谢谢
答案 0 :(得分:0)
每个ViewModel只能看到一个视图-因此,我想知道是否还有另一种方法。
我将使用每个视图的ViewModel来执行此操作,但是每个ViewModel都继承自通用ViewModel。
因此,Common.dll将包含ScreenPayByCardView,而应用程序1将包含从ScreenPayByCardView继承的App1ScreenPayByCardView。这个ViewModel可能甚至不包含自己的逻辑。
答案 1 :(得分:0)
在MVVM场景中,通常将视图的XAML代码中的视图模型作为数据上下文引用。因此,没有问题,两个不同的视图调用了您的viewmodel类的两个实例。如果您喜欢将松散耦合用于单元测试,则使用视图定位器很有意义。
如果common.dll仅包含视图模型,则不应将其耦合到WPF视图。否则,您违反了MVVM模式。
对MVVM相对较新,并且有不采用框架的约束,我仍然喜欢Laurent Bugnion的Pluralsight上的MVVMLight课程(您可以在MSDN许可证中免费订阅3个月):https://www.pluralsight.com/courses/mvvm-light-toolkit-fundamentals >
我还经常查看MVVMLight的代码以了解某些服务实现:https://github.com/lbugnion/mvvmlight/
对于第二个项目,我将立即使用MVVMLight,因为它是开源的。但是对于第一个项目,最好能感觉到痛苦并了解为什么MVVMLight(和其他框架)轮流使用。
希望有帮助!