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

8 mvvm win-universal-app windows-10 uwp

我尝试在我们的Windows 10 Universal应用程序中使用MVVMLight,但似乎它完全无法工作.我见过这个博客

Nuget下载并添加了对MVVM Light程序集的引用

Nuget还在Application.Resources中添加了ViewModelLocator.

无法看到定位器 Application.Resources

Fra*_*SFT 18

您需要手动创建ViewModelLocator,请按照以下步骤操作:

  1. 创建一个新的Windows 10 Universal应用程序,例如:MVVMLightUWPApp1
  2. 使用NuGet Package Manager添加对MVVMLight的引用
  3. 为您的UWP应用添加一个文件夹,例如:ViewModel
  4. 在ViewModel文件夹下,添加两个类:MainViewModelViewModelLocator 在此输入图像描述

在MainViewModel.cs中:

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

在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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 在App.xaml中:

    <Application.Resources>
       <vm:ViewModelLocator xmlns:vm="using:MVVMLightUWPApp1.ViewModel"
                                   x:Key="Locator" />
    </Application.Resources>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在View中,将DataContext设置如下:

    DataContext="{Binding Main, Source={StaticResource Locator}}"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在,您可以设置与VM的绑定,例如:

    <TextBlock Text="{Binding MSG}" FontSize="50" />
    
    Run Code Online (Sandbox Code Playgroud)

好好享受:)