bg:学avalonia,发现通过di也可以实现绑定,可以代替Prism框架的一个功能(Prism看到wpf的挺久没更新了)。
1、首先Nuget中安装tookit和di

2、View和ViewModel正常写
3、创建ServiceLocator,构造函数注册viewModel后就可以从容器中获取
cs
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace wpf_test
{
public class ServiceLocator
{
private readonly IServiceProvider _serviceProvider;
// 从容器中获取 MainWindowViewModel 实例
public MainWindowViewModel MainWindowViewModel =>
_serviceProvider.GetService<MainWindowViewModel>();
public ServiceLocator()
{
var serviceCollection = new ServiceCollection();
// 注册ViewModel
serviceCollection.AddSingleton<MainWindowViewModel>();
// 构造容器
_serviceProvider = serviceCollection.BuildServiceProvider();
}
}
}
4、ViewModel 绑定到 View 的 DataContext 上
cs
DataContext="{Binding MainWindowViewModel, Source={StaticResource ServiceLocator}}"
样例在项目wpf_test中:https://github.com/zzp229/Mvvmdb