简体   繁体   English

MVVM指示灯无法在Windows 10 Universal应用程序中运行

[英]MVVM light can't work in Windows 10 Universal app

I tried to use MVVMLight in our Windows 10 Universal app, but it seems like that it totally can't work. 我试图在我们的Windows 10 Universal应用程序中使用MVVMLight ,但似乎它完全无法工作。 I've seen this blog 我见过这个博客

Nuget downloaded and added a reference to the MVVM Light assemblies Nuget下载并添加了对MVVM Light程序集的引用

Nuget also added the ViewModelLocator in the Application.Resources. Nuget还在Application.Resources中添加了ViewModelLocator。

Can't see the Locator in Application.Resources Application.Resources中看不到Locator

You need to create the ViewModelLocator manually, please follow these steps: 您需要手动创建ViewModelLocator,请按照以下步骤操作:

  1. Create a new Windows 10 Universal app, for example: MVVMLightUWPApp1 创建一个新的Windows 10 Universal应用程序,例如: MVVMLightUWPApp1
  2. Add reference to MVVMLight using NuGet Package Manager 使用NuGet Package Manager添加对MVVMLight的引用
  3. Add a folder for your UWP app, for example: ViewModel 为您的UWP应用添加一个文件夹,例如: ViewModel
  4. Under the ViewModel folder, add two classes: MainViewModel and ViewModelLocator 在ViewModel文件夹下,添加两个类: MainViewModelViewModelLocator 在此输入图像描述

In MainViewModel.cs: 在MainViewModel.cs中:

namespace MVVMLightUWPApp1.ViewModel
{
    public class MainViewModel
    {
        public string MSG { get; set; }
        public MainViewModel()
        {
            MSG = "Test Message";
        }
    }
}

In ViewModelLocator.cs: 在ViewModelLocator.cs中:

namespace MVVMLightUWPApp1.ViewModel
{
    public class ViewModelLocator
    {/// <summary>
     /// Initializes a new instance of the ViewModelLocator class.
     /// </summary>
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            ////if (ViewModelBase.IsInDesignModeStatic)
            ////{
            ////    // Create design time view services and models
            ////    SimpleIoc.Default.Register<IDataService, DesignDataService>();
            ////}
            ////else
            ////{
            ////    // Create run time view services and models
            ////    SimpleIoc.Default.Register<IDataService, DataService>();
            ////}

            SimpleIoc.Default.Register<MainViewModel>();
        }

        public MainViewModel Main
        {
            get
            {
                return ServiceLocator.Current.GetInstance<MainViewModel>();
            }
        }

        public static void Cleanup()
        {
            // TODO Clear the ViewModels
        }
    }
}
  1. In App.xaml: 在App.xaml中:

     <Application.Resources> <vm:ViewModelLocator xmlns:vm="using:MVVMLightUWPApp1.ViewModel" x:Key="Locator" /> </Application.Resources> 
  2. In the View, set DataContext as below: 在View中,将DataContext设置如下:

     DataContext="{Binding Main, Source={StaticResource Locator}}" 
  3. Now, you can set binding to VM, for example: 现在,您可以设置与VM的绑定,例如:

     <TextBlock Text="{Binding MSG}" FontSize="50" /> 

Enjoy it:) 好好享受:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM