【问题标题】:MVVM light can't work in Windows 10 Universal appMVVM 灯无法在 Windows 10 通用应用程序中工作
【发布时间】:2015-11-18 02:41:52
【问题描述】:

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

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

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

Application.Resources 中看不到定位器

【问题讨论】:

    标签: mvvm windows-10 win-universal-app uwp


    【解决方案1】:

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

    1. 新建一个 Windows 10 通用应用,例如:MVVMLightUWPApp1
    2. 使用 NuGet 包管理器添加对 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";
            }
        }
    }
    

    在 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>
      
    2. 在视图中,如下设置DataContext:

      DataContext="{Binding Main, Source={StaticResource Locator}}"
      
    3. 现在,您可以设置绑定到虚拟机,例如:

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

    好好享受吧:)

    【讨论】:

    • 有一个快速的代码问题。感谢这篇文章,因为它可以工作,但是绑定是如何工作的? Main 并没有真正指定,我不清楚绑定如何知道 Main 在 ViewModelLocator 下找到。仅仅是因为它在 MVVMLightUWPApp1.ViewModel 下是公开的吗?
    • @Poken1151 通过在 Binding 中设置 Source={StaticResouce Locator},您告诉绑定使用键 Locator(我们在 App.xaml 文件的 Application.Resources 中定义)查找资源)。从那里它在定位器中寻找 Property Main
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2015-11-04
    相关资源
    最近更新 更多