如何开始在 .net core 3 WPF 应用程序上使用 MvvmLight?
How to start using MvvmLight on a .net core 3 WPF app?
对于一个新项目,我想试用新的 .net core 3.0 WPF 项目,我想将它与 MvvmLight 结合使用。但是,在 .net 核心中并结合 Visual Studio 代码,您不会获得任何脚手架或默认项目。然后是如何让它工作的谜...
我知道我需要在 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>();
}
}
您所说的“我的情况不完整”到底是什么意思?您在构建项目时遇到任何错误吗?
我也在我的项目中使用 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>();
}
}
这应该可以解决问题...但是如上所述,如果您遇到任何错误,了解一下会很有趣。
在你提出这个问题后的 1.5 年里发生了很多事情。 Microsoft 现在支持 MVVMLight 的替代品。你听说过 Microsoft.Toolkit.MVVM 吗?请参见:
https://github.com/windows-toolkit/MVVM-Samples
它应该与 .NET Core 更兼容。糟糕,我忘了它现在只是 .NET(对于 Rev5 及更高版本)
对于一个新项目,我想试用新的 .net core 3.0 WPF 项目,我想将它与 MvvmLight 结合使用。但是,在 .net 核心中并结合 Visual Studio 代码,您不会获得任何脚手架或默认项目。然后是如何让它工作的谜...
我知道我需要在 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>();
}
}
您所说的“我的情况不完整”到底是什么意思?您在构建项目时遇到任何错误吗?
我也在我的项目中使用 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>();
}
}
这应该可以解决问题...但是如上所述,如果您遇到任何错误,了解一下会很有趣。
在你提出这个问题后的 1.5 年里发生了很多事情。 Microsoft 现在支持 MVVMLight 的替代品。你听说过 Microsoft.Toolkit.MVVM 吗?请参见: https://github.com/windows-toolkit/MVVM-Samples 它应该与 .NET Core 更兼容。糟糕,我忘了它现在只是 .NET(对于 Rev5 及更高版本)