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 来创建我记得的 ModelView,或者只是将代码隐藏文件中的数据添加到 DefaultViewModel。

人们对两者都有什么体验?我刚刚开始,我的下一个目标是为在 GridView 中单击项目时添加处理程序 - 上述哪些路径可以轻松地做到这一点?

4

4 回答 4

15

不,MVVM 永远不会消亡!

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

Windows 8 Metro 应用程序包括 XAML 和一个与 Silverlight 和 WPF 非常相似的绑定框架。因此,MVVM 是管理代码的绝佳选择。

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

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

于 2012-09-16T06:52:51.880 回答
4

不,MVVM 没有死,而且还活着!!!

MVVM 的 ColinE 定义很好地恢复了它。事实上,MVVM 基本上是一种设计模式,不依赖于特定的框架。

使用 MVVM 不是教条……尽管大多数使用 XAML 应用程序编程 [WPF、Silverlight、WP 7 和 WinRT……] 工作的人都会同意 MVVM 真正促进了清晰的 SOC 关注点分离,在GUI 和后端逻辑。

我个人将 Nuget 的 Laurent Bugnion 的 MVVMLight 包与 WinRT 结合使用,尽管您可以随意使用任何其他 MVVM 包或您觉得放心的选项。

如果您需要更多示例参考,我会邀请您查看 Gill Cleeren 的“Windows 8 商店中的 MVVM”网络研讨会的以下记录

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

于 2012-11-03T01:02:01.350 回答
3

MVVM 在 Windows 8 Metro 应用程序中并未消亡。

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

微软最近发布了一个不错的示例。它没有明确地说 MVVM,但它有你需要开始的东西。并且 Josh Smith 的文章当然还是有用的。

于 2012-09-15T18:21:03.930 回答
3

我推荐http://stylemvvm.codeplex.com,它是从头开始编写的,以支持 Metro 项目(C#、C++/CX、HTML/JS)。它包括一个完整的 IOC、ICommand 和附加命令行为的实现、Tiles、徽章、Toasts 和 Charms 的服务。它还包括一个很好的 Mediator 类,它可以感知调度程序。加上许多 Visual Studio 模板可帮助您入门。

注意:因为我写了它,我可能有偏见:)

于 2012-10-06T20:47:57.187 回答