WPF Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.

news/2025/10/3 23:56:37/文章来源:https://www.cnblogs.com/Fred1987/p/19125154

 

Install-Package Microsoft.Extensions.DependencyInjection;
Install-Package Microsoft.Hosting;
Install-Package CommunityToolkit.mvvm;

 

 

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Configuration;
using System.Data;
using System.Windows;namespace WpfApp24
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : Application{private IHost host;public App(){host=Host.CreateDefaultBuilder().ConfigureServices((context, services) =>{services.AddSingleton<IIDService,IDService>();services.AddSingleton<INameService, NameService>();services.AddSingleton<IISBNService,ISBNService>();services.AddSingleton<MainWindow>();services.AddSingleton<MainVM>();}).Build();}protected override async void OnStartup(StartupEventArgs e){await host!.StartAsync();var mainWin=host.Services.GetRequiredService<MainWindow>();mainWin.Show();base.OnStartup(e);}protected override async void OnExit(ExitEventArgs e){using(host){await host!.StopAsync(TimeSpan.FromSeconds(5));}base.OnExit(e);}}}public partial class MainWindow : Window
{public MainWindow(MainVM vm){InitializeComponent();this.DataContext = vm;this.Loaded += async (s, e) =>{try{await vm.InitBooksCollectionAsync();}catch (Exception ex){MessageBox.Show(ex.Message);}};}
}

 

 

 

 

 

 

 

 

 

 

image

 

//App.xaml
<Application x:Class="WpfApp24.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp24"><Application.Resources></Application.Resources>
</Application>//App.xaml.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Configuration;
using System.Data;
using System.Windows;namespace WpfApp24
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : Application{private IHost host;public App(){host=Host.CreateDefaultBuilder().ConfigureServices((context, services) =>{services.AddSingleton<IIDService,IDService>();services.AddSingleton<INameService, NameService>();services.AddSingleton<IISBNService,ISBNService>();services.AddSingleton<MainWindow>();services.AddSingleton<MainVM>();}).Build();}protected override async void OnStartup(StartupEventArgs e){await host!.StartAsync();var mainWin=host.Services.GetRequiredService<MainWindow>();mainWin.Show();base.OnStartup(e);}protected override async void OnExit(ExitEventArgs e){using(host){await host!.StopAsync(TimeSpan.FromSeconds(5));}base.OnExit(e);}}}//MainWindow.xaml
<Window x:Class="WpfApp24.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:WpfApp24"WindowState="Maximized"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition Height="Auto"/></Grid.RowDefinitions><DataGrid Grid.Row="0"ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="2,2"VirtualizingPanel.CacheLengthUnit="Item"ScrollViewer.CanContentScroll="True"ScrollViewer.IsDeferredScrollingEnabled="True"AutoGenerateColumns="False"><DataGrid.Resources><Style TargetType="DataGridRow"><Setter Property="FontSize" Value="30"/><!--<Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers>--></Style></DataGrid.Resources><DataGrid.Columns><DataGridTextColumn Binding="{Binding Id}"/><DataGridTextColumn Binding="{Binding Name}"/><DataGridTextColumn Binding="{Binding Title}"/><DataGridTextColumn Binding="{Binding Topic}"/><DataGridTextColumn Binding="{Binding ISBN}"/></DataGrid.Columns></DataGrid><TextBlock Text="{Binding StatusMsg}" Grid.Row="1" FontSize="30"/></Grid>
</Window>//MainWindow.xaml.cs
using CommunityToolkit.Mvvm.ComponentModel;
using System.Collections.ObjectModel;
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;namespace WpfApp24
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(MainVM vm){InitializeComponent();this.DataContext = vm;this.Loaded += async (s, e) =>{try{await vm.InitBooksCollectionAsync();}catch (Exception ex){MessageBox.Show(ex.Message);}};}}public class MainVM : ObservableObject{IIDService iDService;INameService nameService;IISBNService isbnService;public MainVM(IIDService iDServiceValue, INameService nameService, IISBNService isbnService){this.iDService = iDServiceValue;this.nameService = nameService;this.isbnService = isbnService;}public async Task InitBooksCollectionAsync(){BooksCollection = new ObservableCollection<Book>();List<Book> booksList = new List<Book>();await Task.Run(async () =>{for (int i = 1; i < 100000001; i++){booksList.Add(new Book(){Id = iDService.GetID(),Name = nameService.GetName(),ISBN = isbnService.GetISBN(),Title = $"Title_{i}",Topic = $"Topic_{i}"});if (i % 100000 == 0){await PopulateBooksCollectionAsync(booksList);}}if (booksList.Any()){await PopulateBooksCollectionAsync(booksList);}});}private async Task PopulateBooksCollectionAsync(List<Book> booksList){await Application.Current.Dispatcher.InvokeAsync(() =>{var tempList = booksList.ToList();booksList.Clear();foreach (var bk in tempList){BooksCollection.Add(bk);}StatusMsg = $"Loaded {BooksCollection.Count} items";}, System.Windows.Threading.DispatcherPriority.Background);}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection;}set{SetProperty(ref booksCollection, value);}}private string statusMsg;public string StatusMsg{get{return statusMsg;}set{SetProperty(ref statusMsg, value);}}}public class Book{public int Id { get; set; }public string Name { get; set; }public string Title { get; set; }public string Topic { get; set; }public string ISBN { get; set; }}public interface IIDService{int GetID();}public class IDService : IIDService{int id = 0;public int GetID(){return Interlocked.Increment(ref id);}}public interface INameService{string GetName();}public class NameService : INameService{int idx = 0;public string GetName(){return $"Name_{Interlocked.Increment(ref idx)}";}}public interface IISBNService{string GetISBN();}public class ISBNService : IISBNService{int idx = 0;public string GetISBN(){return $"ISBN_{Interlocked.Increment(ref idx)}_{Guid.NewGuid():N}";}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery 特效 网站企业网站要更新文章吗

在上一篇文章中&#xff0c;我们讨论了敏捷团队自动化测试用例的各种用例。其中一种情况是&#xff0c;团队希望将测试与每个构建集成&#xff0c;并将持续集成作为构建过程的一部分。 在本文中&#xff0c;我们将讨论持续集成/持续交付平台中的集成测试。 让我们先从基础知识…

网站建设服务器在国外如何打击wordpress搬家修改域名

这是我毕业后的第一份工作...面试时&#xff0c;HR小姐姐告诉我...然鹅...我入职之后才发现&#xff1a;对标阿里的只有加班强度对标华为的只有狼性文化对标百度的&#xff0c;额&#xff0c;没有对标百度同事们有的住在海淀区、有的住在朝阳区&#xff0c;作为刚毕业的一枚“穷…

山东临沂网站推广标书制作收费

## 引言在当今快速发展的数字化时代&#xff0c;数据资产已经成为企业最宝贵的资源之一。数据资产不仅对企业的运营决策有着至关重要的影响&#xff0c;而且在企业的财务健康和市场竞争力方面扮演着核心角色。数据要素&#xff0c;作为构成数据资产的基本单元&#xff0c;其管理…

Linux 中 awk命令提取偶数列数据

001、[root@localhost test]# ls a.txt [root@localhost test]# cat a.txt ## 测试数据 01 02 03 04 05 07 08 09 10 11 13 14 15 16 17 19 …

『随笔』0919

空虚没什么写回忆录的动力。那就听着歌写写这一周的感受吧。回忆+期盼 高一新生军训,作为军训完 3 个月的学长再来看感觉完全不一样了,恨不得他们多练一点、天气热一点…… 跑操的时候看到之前带我们的教官了。怀恋啊…

网站备案拍照背景seo推广 课程

TypeScript中的模块和命名空间&#xff1a;代码组织与封装 引言 在TypeScript中&#xff0c;模块和命名空间是两种用于代码组织和封装的工具。模块用于将代码划分为独立的单元&#xff0c;而命名空间提供了一种将相关类型和值分组的方式。 基础知识 模块&#xff1a;通过文…

工商注册查询官网seo关键词排名工具

前言 有个项目需要手上laravel连接客户的sqlserver数据库读取数据&#xff0c;故在本地开发的lnmp环境中&#xff0c;php需要增加扩展 过程 从微软官网下载sqlsrv扩展,注意注意php版本&#xff0c;下载地址 解压的文件会有nts和ts两个版本&#xff0c;本地打开phpinfo查看 将…

主要编码规范

在格式规范上,统一用 4 个空格进行缩进,坚决禁用 Tab 键,运算符、逗号两侧也必须加上空格,比如错误的写法 “for (int i=0;i<10;i++){sum+=i;}”,要改成 “for (int i = 0; i < 10; i++) { sum += i; }” 才…

网站建设源代码上传深圳网站制作的公司排名

一&#xff1a;OpenCV透视变换的概念 仿射变换(affine transform)与透视变换(perspective transform)在图像还原、图像局部变化处理方面有重要意义。通常&#xff0c;在2D平面中&#xff0c;仿射变换的应用较多&#xff0c;而在3D平面中&#xff0c;透视变换又有了自己的一席之…

南通外贸网站推广wordpress oss不显示

一、背景说明 1、创建一个新用户&#xff1a;test_user。 2、该用户登录后&#xff0c;默认目录为&#xff1a;/opt/project&#xff0c;且仅可操作该目录。 3、该用户需要jdk的执行权限。 4、该用户需要nginx的使用权限。 5、设&#xff1a; jdk目录为&#xff1a;/opt/jdk/jd…

全球网站域名微网站建设及微信推广方案ppt

一、首先讲一下TCP的由来 最开始&#xff0c;人们考虑到将网络信息的呼唤与回应进行规范&#xff0c;达成一种公认的协议&#xff0c;就好像没有交通规则的路口设定交通规则。 人们设计出完美的OSI协议&#xff0c;这个协议包含七个层次由下到上分别是&#xff1a; 物理层&…

铜川商城网站建设查看网站开发

简介 ArrayList类示一个可以动态修改的数组&#xff0c;与普通数组的区别是它没有固定大小的限制&#xff0c;可以添加和删除元素。 适用情况&#xff1a; 频繁的访问列表中的某一元素只需要在列表末尾进行添加和删除某些元素 实例 ArrayList 是一个数组队列&#xff0c;提…

苏州网络公司建网站教育培训网站建设方案

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…

建成局网站建设网站单子

1. 问题描述 如题&#xff0c;将PyTorch Tensor类型的变量转换成numpy时报错&#xff1a; RuntimeError: Cant call numpy() on Variable that requires grad. Use var.detach().numpy() instead. 2. 解决办法 出现这个现象的原因是&#xff1a;待转换类型的PyTorch Tensor变…

ue5.1最新安装的时候关于重装vs2022版本的问题

ue5.1最新安装的时候关于重装vs2022版本的问题ue5.1最新安装的时候,ue已经出了5.6了,vs也更新了好几个版本了,关于重装vs2022版本的问题 这里每次使用visual studio 的setup工具选择删除最新的vs版本然后D:\softdir\…

US$88 BW9 Key Clamp SN-CP-JJ-15 for BMW Motor Keys for SEC-E9 Key Cutting Machine

BW9 Key Clamp SN-CP-JJ-15 for BMW Motor Keys for SEC-E9 Key Cutting Machine Package list:1 x BW9 Key Clamp SN-CP-JJ-15 for BMW Motor Keys for SEC-E9 Key Cutting Machine Pictures of BW9 Key Clamp SN-CP-…

Docker 安装配置 OnlyOffice - Higurashi

参考: Docker 安装配置 OnlyOffice Installing ONLYOFFICE Docs for Docker on a local server步骤 1:拉取 OnlyOffice Docker 镜像 首先,使用以下命令从 Docker Hub 拉取 OnlyOffice Document Server 镜像: sudo …

什么是计算数学?

什么是计算数学?计算数学是一门研究如何利用计算机有效地解决数学问题的学科。它不仅仅是“用计算机做计算”,更核心的内容是:为数学问题设计算法:将一个复杂的数学问题(如求解一个微分方程)转化为一系列计算机可…

数论中的欧拉函数

欧拉函数(Eulers totient function),记作 \(\phi(n)\),是数论中一个非常重要的函数。它的定义很简单: 对于正整数 \(n\),\(\phi(n)\) 表示小于等于 \(n\) 且与 \(n\) 互质的正整数的个数。\(\phi(1) = 1\)(只有…

哪个网站做职客比较好 比较正规网页模板psd素材

前言最近 Python 之父 Guido van Rossum(龟爷)终于在 Python 官方邮件组落实了 Python 2.7 的终焉之日(EOL)。说的是 Python 2.7 的 EOL 日期最终确定为 2020 年 1 月 1 日&#xff0c;之后不会有任何更新&#xff0c;包括源码的安全补丁。所以兼容Python3已经可以说非常必要了…