当前位置: 首页 > news >正文

WPF CommunityToolkit.mvvm implement dependency injection via ServiceBuilder and ServiceCollection

Install-Package communitytoolkit.mvvm
Install-Package Microsoft.Extensions.DependencyInjection

 

<Application x:Class="WpfApp3.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp3"><Application.Resources><Style TargetType="TextBlock"><Setter Property="FontSize" Value="80"/><Setter Property="HorizontalAlignment" Value="Center"/><Setter Property="VerticalAlignment" Value="Center"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="150"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></Application.Resources>
</Application>using System.Configuration;
using System.Data;
using System.Windows;
using CommunityToolkit.Mvvm;
using CommunityToolkit;
using System.Security.Cryptography;
using Microsoft.Extensions.DependencyInjection;namespace WpfApp3
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : Application{public static IServiceProvider? ServiceProvider { get; private set; }protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);ConfigureServices();var win = ServiceProvider?.GetRequiredService<MainWindow>();win.Show();}       public void ConfigureServices(){ServiceCollection services = new ServiceCollection();services.AddSingleton<IIDService, IDService>();services.AddSingleton<INameService, NameService>();services.AddSingleton<MainWindow>();services.AddSingleton<MainWindowViewModel>();ServiceProvider=services.BuildServiceProvider();}}public interface IIDService{public int GetID();}public class IDService : IIDService{public static int id = 0;public int GetID(){return Interlocked.Increment(ref id);}}public interface INameService{public string GetName();}public class NameService : INameService{static int idx = 0;public string GetName(){return $"Name_{Interlocked.Increment(ref idx)}";}}
}<Window x:Class="WpfApp3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp3"mc:Ignorable="d"WindowState="Maximized"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"Content="Load" FontSize="150"Command="{Binding LoadCommand}"/><TextBlock Text="{Binding Id}" Grid.Row="1" Grid.Column="0"/><TextBlock Text="{Binding Name}" Grid.Row="1" Grid.Column="1"/></Grid>
</Window>using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using CommunityToolkit.Mvvm;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;namespace WpfApp3
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{//MainWindowViewModel vm;public MainWindow(MainWindowViewModel vmValue){InitializeComponent();this.DataContext=vmValue;}}public class MainWindowViewModel : ObservableObject{IIDService idService;INameService nameService;public MainWindowViewModel(IIDService idServiceValue, INameService nameServiceValue){idService = idServiceValue;nameService = nameServiceValue;LoadCommand = new RelayCommand<object>(LoadCommandExecuted);}private void LoadCommandExecuted(object? obj){Id = idService.GetID();Name = nameService.GetName();}public RelayCommand<object> LoadCommand { get; set; }private int id;public int Id{get{return id;}set{SetProperty(ref id, value);}}private string name;public string Name{get{return name;}set{SetProperty(ref name, value);}}}
}

 

 

 

 

 

image

 

 

 

 

 

 

 

 

image

 

http://www.jsqmd.com/news/358877/

相关文章:

  • 首款AI截图软件哪个好用又免费?全能截图翻译录屏GIF神器一键长截图OCR贴图取色无广告小巧免登录
  • 【微服务 Day1】SpringCloud实战开发(Mybatis-plus + Docker) - 详解
  • 第三十六节:EFCore10.0新增功能和中断性变更
  • 个人网盘管理|基于springboot + vue个人网盘管理系统(源码+数据库+文档) - 实践
  • 三亚精选十大海鲜美食推荐,让你的味蕾一次满足
  • 4.2 缓存策略与多级缓存:如何减少90%的数据库访问?
  • 3.3 可用性测试与演练:如何验证系统在极端情况下的表现?
  • 电子元器件-保险丝的选项
  • 4.1 性能优化秘籍:如何将系统性能提升10倍?
  • [AI] 人工智能发展历程
  • 3.3 可用性测试竟然还能这样玩?
  • 内存管理之道:解读CANN在NPU上的高效内存复用策略
  • 实用指南:(2025)程序员转大模型应用开发:揭秘AI时代的热门转型之路,你适合加入吗?
  • 探索CANN:开源AI计算底座的关键组件与技术思想
  • 采用GD32F103C8T6开发板的硬件I2C通信实现ADS1115的模拟电压读取(附源码下载)
  • CANN生态中的算子测试框架:确保AI计算正确性与性能的基石
  • 抖音自动回复蓝字卡片跳转微信H5开源
  • CANN与开源生态:如何融入并赋能主流AI框架的NPU后端支持
  • SpringBoot应用启动太慢?试试把它编译成Native原生应用
  • 入门指南:基于 CANN 仓库快速理解AI软件栈开发流程
  • AI视角下的 CANN 仓库架构全解析:高效计算的核心
  • 互联网大厂Java求职面试实战:微服务、电商场景与Spring生态详解
  • 用 CANN ops-nn 提升 AI 性能:实操技巧与核心逻辑拆解
  • 优化校园光环境:从照亮空间到专业护眼照明转变
  • 用MonkeyOCR解析复杂PDF
  • CANN 生态新进展:ops-nn 仓库如何赋能大模型训练?
  • USACO历年黄金组真题解析 | 2005年11月
  • 格莱美评审官方认证!吴克群“忠于自我”创作观成国际标杆,他早就该被世界看见!
  • OpenClaw Slack 集成指南
  • 编程大师-技术-算法-leetcode-1472. 设计浏览器历史记录