如何在.net core 3 WPF应用程序上开始使用MvvmLight?

时间:2019-06-25 14:40:16

标签: wpf data-binding mvvm-light .net-core-3.0

对于一个新项目,我想尝试一个新的.net core 3.0 WPF项目,并且想与MvvmLight结合使用。但是,在.net core和Visual Studio Code中,您不会得到任何脚手架或默认项目。然后有一个谜团是如何使它正常工作...

我知道我需要在app.xaml.cs,mainwindow.xaml和mainwindow.xaml.cs中执行某些操作。以及创建一些ViewModelLocator服务。但是MvvmLight的文档在这方面还是空的。

我在SO(MvvmLightLibsStd10 and UWP)上发现了以下问题,但对于我来说还不完整,我也不确定应该使用常规软件包还是特殊的std10版本。

更新2019-06-26 我使用MvvmLightLibsStd10版本5.4.1.1。使用以下代码工作。

App.xaml

    <Application.Resources>
        <ResourceDictionary>
            <vm:ViewModelLocator x:Key="Locator" xmlns:vm="clr-namespace:$AssemblyName$.ViewModel" />
        </ResourceDictionary>
    </Application.Resources>

MainWindow.xaml

        DataContext="{Binding ValidatorListViewModel, Source={StaticResource Locator}}">

ViewModelLocator.cs

using GalaSoft.MvvmLight.Ioc;

namespace $AssemblyName$.ViewModel
{
    public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            SimpleIoc.Default.Register<ValidatorListViewModel>();
        }

        public ValidatorListViewModel ValidatorListViewModel => SimpleIoc.Default.GetInstance<ValidatorListViewModel>();
    }
}

2 个答案:

答案 0 :(得分:4)

自从您提出这个问题以来的 1.5 年里发生了很多事情。 Microsoft 现在支持 MVVMLight 的替代品。您听说过 Microsoft.Toolkit.MVVM 吗?请参阅: https://github.com/windows-toolkit/MVVM-Samples 它应该与 .NET Core 更兼容。哎呀,我忘了它现在只是 .NET(对于 Rev5 及以上版本)

答案 1 :(得分:0)

在我看来这还不完整”到底是什么意思?构建项目时出现任何错误吗?

我也在项目中使用MvvmLight。 例如:

在App.xaml中

<ResourceDictionary>
                <vm:ViewModelLocator x:Key="Locator"
                                     d:IsDataSource="True"
                                     xmlns:vm="clr-namespace:$AssemblyName$.ViewModel" />
</ResourceDictionary>

在MainWindow.xaml

DataContext="{Binding Main, Source={StaticResource Locator}}"

在ViewModelLocator.cs

public ViewModelLocator()
{
   ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
   SimpleIoc.Default.Register<MainViewModel>();
}

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

这应该可以解决问题...但是如上所述,如果您遇到任何错误,这将很有趣。