Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVVM灯可以';无法在Windows 10通用应用程序中工作_Mvvm_Windows 10_Win Universal App_Uwp - Fatal编程技术网

MVVM灯可以';无法在Windows 10通用应用程序中工作

MVVM灯可以';无法在Windows 10通用应用程序中工作,mvvm,windows-10,win-universal-app,uwp,Mvvm,Windows 10,Win Universal App,Uwp,我试着在我们的Windows10Universal应用程序中使用MVVMLight,但它似乎完全无法工作。我见过这个 Nuget下载并添加了对MVVM灯光组件的引用 Nuget还在Application.Resources中添加了ViewModelLocator 在应用程序中看不到定位器。参考资料您需要手动创建ViewModelLocator,请按照以下步骤操作: 创建新的Windows 10通用应用程序,例如:MVVMLightUWP1 使用NuGet Package Manager添加对MV

我试着在我们的Windows10Universal应用程序中使用MVVMLight,但它似乎完全无法工作。我见过这个

Nuget下载并添加了对MVVM灯光组件的引用

Nuget还在Application.Resources中添加了ViewModelLocator


应用程序中看不到定位器。参考资料

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

  • 创建新的Windows 10通用应用程序,例如:MVVMLightUWP1
  • 使用NuGet Package Manager添加对MVVMLight的引用
  • 为您的UWP应用程序添加文件夹,例如:ViewModel
  • 在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
            }
        }
    }
    
  • 现在,您可以设置绑定到VM,例如:

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

  • 享受它:)

    有一个快速的代码问题。谢谢你的这篇文章,因为它是有效的,但是绑定是如何工作的呢?Main实际上没有指定,我不清楚绑定如何知道Main是在ViewModelLocator下找到的。这仅仅是因为它在MVVMLightUWPApp1.ViewModel下是公共的吗?@Poken1151通过在绑定中设置Source={staticresource Locator},您告诉绑定使用键定位器(我们在App.xaml文件中的Application.Resources中定义)查找资源。从那里,它在定位器中查找属性Main
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    
    <TextBlock Text="{Binding MSG}" FontSize="50" />