MVVM在Windows 8商店应用中已经过时了吗?

11

我开始学习Windows 8商店应用。

我还记得之前在Silverlight和WPF编程中,人们采用MVVM模式,现在我不确定是否应该使用之前所学的内容。

我添加了GalaSoft.MvvmLight参考,并创建了一个ViewModel并根据以下建议将其添加到我的xaml中:

DataContext="{Binding Source={StaticResource Locator}, Path=Welcome}"

看起来微软在LayoutAwarePage中包含了某种ModelView实现:

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
    // TODO: Assign a bindable collection of items to this.DefaultViewModel["Items"]
    //  DefaultViewModel["WelcomeTiles"] = WelcomeTiles;
}

如果设置了以下数据上下文,则可以访问。

<DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}" />

现在我不确定是否应该像我记得的那样使用MVVMLight来创建ModelViews,还是将数据添加到DefaultViewModel的code-behind文件中。

大家对这两种方式有什么经验吗? 我刚刚开始,我的下一个目标是为GridView中点击项目时添加处理程序-哪种方法可以让我轻松完成?

4个回答

15

不,MVVM永远不会消失!

Model-View-ViewModel是一种设计模式,因此它并不依赖于特定的框架或实现。然而,它是一种最方便与支持数据绑定的UI框架一起使用的UI设计模式。

Windows 8 Metro应用包括XAML和类似Silverlight和WPF的绑定框架。因此,MVVM是管理代码的绝佳选择。

您在LayoutAwarePage中发现的代码在这篇博客文章中有所描述。它试图通过提供各种存根实现来简化Windows 8 Metro应用程序的开发。该页面包括一个DefaultViewModel,它是一个可观察的字典。

就个人而言,我不会使用它!


1
我已经更深入地研究了一下。现在,当创建一个新页面时,我也会创建一个ViewModel并将其数据绑定。但是为了证明概念和快速演示,我发现只需单击Visual Studio模板并使用defaultViewModel非常容易。感谢您的评论。 - Poul K. Sørensen

4

不,MVVM并没有死亡,而是非常活跃!!!

ColinE对MVVM的定义总结得相当好。 事实上,MVVM基本上是一种设计模式,并且不依赖于特定的框架。

使用MVVM不是教条主义..., 尽管大多数在XAML应用程序编程[WPF、Silverlight、WP 7和WinRT等]中工作过的人会同意,在GUI开发和后端逻辑之间真正促进了清晰的SOC分离。

我个人在WinRT中使用了Laurent Bugnion的MVVMLight包,但您可以自由选择使用任何其他MVVM包或选项。

如果您需要更多的示例,请查看Gill Cleeren关于'MVVM in Windows 8 Store'的网络研讨会录制:

http://www.silverlightshow.net/video/MVVM-in-Win8-Webinar.aspx


3

MVVM在Windows 8 Metro应用中仍然存在。

我们的应用程序中没有使用MvvmLight,但是你需要的基本组件,例如绑定到ViewModel属性、在ViewModel中使用ICommands和INotifyPropertyChanged都可以通过非常小的更改(如果有的话)实现。

最近Microsoft发布了一个不错的示例,链接在此。虽然它没有明确提到MVVM,但它拥有你开始所需的一切。Josh Smith的文章当然仍然有用。


3
我推荐使用http://stylemvvm.codeplex.com,它是专门为支持Metro项目(C#,C ++ / CX,HTML / JS)而编写的。它包括完整的IOC,实现了ICommand和附加命令行为,提供了磁贴、徽章、Toast和Charm等服务。还包括一个很好的Mediator类,它是调度程序感知的。此外,还有许多Visual Studio模板可帮助您入门。
注意:由于我是作者,所以可能有偏见 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接