MVVM light无法在Windows 10通用应用程序中运行。

8

我尝试在我们的Windows 10通用应用程序中使用MVVMLight,但似乎完全无法工作。我看到了这个blog

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

Nuget还将ViewModelLocator添加到了Application.Resources中。

Application.Resources中看不到Locator。

1个回答

18

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

  1. 创建一个新的Windows 10通用应用程序,例如:MVVMLightUWPApp1
  2. 使用NuGet包管理器添加对MVVMLight的引用
  3. 添加一个文件夹用于您的UWP应用程序,例如:ViewModel
  4. 在ViewModel文件夹下,添加两个类:MainViewModelViewModelLocator enter image description here

在MainViewModel.cs中:

namespace MVVMLightUWPApp1.ViewModel
{
    public class MainViewModel
    {
        public string MSG { get; set; }
        public MainViewModel()
        {
            MSG = "Test Message";
        }
    }
}
在 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. 在 App.xaml 中:

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

    DataContext="{Binding Main, Source={StaticResource Locator}}"
    
  • 现在,你可以将绑定设置到虚拟机中,例如:

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

    享受它:)


    有一个快速的代码问题。感谢这篇文章,因为它起作用了,但是绑定是如何工作的?Main 没有被明确定义,我不清楚绑定如何知道 Main 在 ViewModelLocator 下面找到。仅仅是因为它在 MVVMLightUWPApp1.ViewModel 下是公共的吗? - Poken1151
    通过在绑定中设置 Source={StaticResource Locator},你告诉绑定器去查找具有键名 Locator 的资源(我们在 App.xaml 文件的 Application.Resources 中定义)。然后它会在定位器中查找 Main 属性。 - thorkia

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