wpf依赖注入驱动的 MVVM实现(含免费源代码demo)
bg:学avalonia,发现通过di也可以实现绑定,可以代替Prism框架的一个功能(Prism看到wpf的挺久没更新了)。
1、首先Nuget中安装tookit和di
2、View和ViewModel正常写
3、创建ServiceLocator,构造函数注册viewModel后就可以从容器中获取
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();// 注册ViewModelserviceCollection.AddSingleton<MainWindowViewModel>();// 构造容器_serviceProvider = serviceCollection.BuildServiceProvider();}}
}
4、ViewModel 绑定到 View 的 DataContext 上
DataContext="{Binding MainWindowViewModel, Source={StaticResource ServiceLocator}}"
样例在项目wpf_test中:https://github.com/zzp229/Mvvmdb