如何在Windows Phone 8.1应用程序(xaml)中实现MVVM



有人能举一个实现的例子吗?它是通过ViewModel实现INotifyPropertyChanged(并引发事件,就像在Silverlight中所做的那样)还是以其他方式完成的?ViewModel如何绑定到视图?

到目前为止,我发现的所有示例都是不完整或过时的(请参阅Silverlight应用程序,而不是Xaml应用程序)。

在Windows RT的情况下,我建议关注PRISM。它提供了非常好的现代开发实践。您将获得合适的导航服务、应用程序生命周期管理、出色的MVVM支持以及非常灵活的视图和ViewModels解析机制。您可以通过NuGet轻松地将其添加到您的项目中。它有很好的文档,所以如果你有任何问题,你可以在MSDN上找到答案,甚至可以下载免费的《Windows运行时棱镜》一书。我们的团队在使用PRISM构建项目方面有着成功的经验。

我目前在自己的Universal/W8.1/WP8.1应用程序中使用以下方法。这种方法使用RArcher WinRT工具包,这是一个基于MVVM模式的实验工具包。它提供了一种维护应用程序状态的方法,您可以使用ViewModelBase来实现INPC。它还使用Unity依赖项注入容器。

我首先要将ViewModelLocator作为应用程序范围的资源,这样我的Views就可以轻松地访问它。

<Application.Resources>
     <vm:ViewModelLocator x:Key="ViewModelLocator" />
</Application.Resources>

视图可以这样使用:

<Page.DataContext>
     <Binding Source="{StaticResource ViewModelLocator}" Path="MainViewModel" />
</Page.DataContext>

ViewModelLocator看起来像这样:

public sealed class ViewModelLocator
{
     public ViewModelLocator()
     {
         RegisterIoCBindings();
     }
     public IMainViewModel MainViewModel
     {
         get { return IocContainer.Get<IMainViewModel>(); }
     }
     private void RegisterIoCBindings()
     {
         IocContainer.Container.RegisterType(typeof(IMainViewModel), typeof(MainViewModel), 
         null, new ContainerControlledLifetimeManager());
     }
}

MainViewModelViewModelBase为基类,实现IMainViewModel:

public sealed class MainViewModel : ViewModelBase, IMainViewModel
{
     private string myText;
     [AutoState] 
     public string MyText
     {
         get { return myText; }
         set 
         { 
             myText = value;
             OnPropertyChanged();
         }
     }
     public MainViewModel() // You can use constructor injection here
     {             
     }
}

这是基本设置。正如其他人所说,MVVM是一种模式,有很多方法可以使用它

如果您想了解更多关于这种方法的信息,请查看工具包和统一DI。

没有区别,是一样的。因为MVVM是一种模式。你可以很容易地在你的windows手机应用程序中实现它。我正在为我的wp应用程序使用MVVM Light,并使用EventToCommand行为来引发事件。我在GitHub上有一个开源的应用程序,如果你愿意,你可以查看它。

最新更新