WPF Prism register interface and implemented interface service

news/2025/9/24 18:43:54/文章来源:https://www.cnblogs.com/Fred1987/p/19109786
Install-Package Prism.WPF;
Install-Package Prism.DryIOC;

 

 

 

 

//app.xaml
<prism:PrismApplication x:Class="WpfApp4.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp4"xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>//App.xaml.cs
using System.Configuration;
using System.Data;
using System.Windows;
using Prism.DryIoc;
using Prism.Commands;
using WpfApp4.Services;
using WpfApp4.ViewModels;
using WpfApp4.Views;namespace WpfApp4
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIdService,IdService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<MainWindow, MainWinowViewModel>("MainWindow");containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>("ViewA");containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("ViewB");}protected override void OnInitialized(){base.OnInitialized();var regionManager=Container.Resolve<IRegionManager>();regionManager.RequestNavigate("MainRegion", "ViewA");}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}}}

 

 

 

 

image

 

 

 

 

 

 

 

image

 

 

//App.xaml
<prism:PrismApplication x:Class="WpfApp4.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp4"xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>//App.xaml.cs
using System.Configuration;
using System.Data;
using System.Windows;
using Prism.DryIoc;
using Prism.Commands;
using WpfApp4.Services;
using WpfApp4.ViewModels;
using WpfApp4.Views;namespace WpfApp4
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIdService,IdService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<MainWindow, MainWinowViewModel>("MainWindow");containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>("ViewA");containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("ViewB");}protected override void OnInitialized(){base.OnInitialized();var regionManager=Container.Resolve<IRegionManager>();regionManager.RequestNavigate("MainRegion", "ViewA");}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}}}//MainWindow.xaml
<Window x:Class="WpfApp4.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:WpfApp4"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"mc:Ignorable="d"WindowState="Maximized"Title="{Binding MainWinTitle,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch"HorizontalAlignment="Stretch"><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/>            </Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0"Content="View A"Command="{Binding NavigateCommand}"CommandParameter="ViewA"/><Button Grid.Row="0" Grid.Column="1"Content="View B"Command="{Binding NavigateCommand}"CommandParameter="ViewB"/><ContentControl Grid.Row="1"Grid.Column="0"Grid.ColumnSpan="2"prism:RegionManager.RegionName="MainRegion"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"BorderBrush="Blue"BorderThickness="5"/></Grid>
</Window>//MainWindowViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WpfApp4.Services;namespace WpfApp4.ViewModels
{public class MainWinowViewModel : BindableBase{IISBNService isbnService;IRegionManager regionManager;public MainWinowViewModel(IISBNService isbnServiceValue,IRegionManager regionManagerValue){MainWinTitle = $"In MainWindow {DateTime.Now.ToString("yyyy - MM - dd:HH - mm - ss")},{Guid.NewGuid():N}";isbnService = isbnServiceValue;regionManager = regionManagerValue;InitTimer();NavigateCommand = new DelegateCommand<string>(NavigateCommandExecuted);}private void NavigateCommandExecuted(string viewName){if(!string.IsNullOrEmpty(viewName)){regionManager.RequestNavigate("MainRegion",viewName);}}private void InitTimer(){System.Timers.Timer tmr = new System.Timers.Timer();tmr.Interval = 1000;tmr.Elapsed += Tmr_Elapsed;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){MainWinTitle = $"In MainWindow {DateTime.Now.ToString("yyyy - MM - dd:HH - mm - ss")},{Guid.NewGuid():N}";}private string mainWinTitle;public string MainWinTitle{get{return mainWinTitle;}set{SetProperty(ref mainWinTitle, value);}}public DelegateCommand<string> NavigateCommand { get; set; }}    
}//ViewA.xaml
<UserControl x:Class="WpfApp4.Views.ViewA"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:prism="http://prismlibrary.com/"xmlns:local="clr-namespace:WpfApp4.Views"mc:Ignorable="d" VerticalAlignment="Stretch"HorizontalAlignment="Stretch"prism:ViewModelLocator.AutoWireViewModel="True"><UserControl.Background><ImageBrush ImageSource="/Images/1.jpg"/></UserControl.Background><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions><TextBlock Grid.Row="0" Text="{Binding ViewAMsg}" FontSize="50"/><DataGrid Grid.Row="1" ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="100"VirtualizingPanel.CacheLengthUnit="Pixel"AutoGenerateColumns="False"><DataGrid.Background><ImageBrush ImageSource="/Images/1.jpg"/></DataGrid.Background><DataGrid.Resources><Style TargetType="DataGridCell"><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 Author}"/><DataGridTextColumn Binding="{Binding ISBN}"/><DataGridTextColumn Binding="{Binding Title}"/><DataGridTextColumn Binding="{Binding Topic}"/>                </DataGrid.Columns></DataGrid><Button Grid.Row="2" Content="View A Load Data"FontSize="50"Command="{Binding LoadDataCommand}"/></Grid></UserControl>//ViewAViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WpfApp4.Models;
using WpfApp4.Services;namespace WpfApp4.ViewModels
{public class ViewAViewModel:BindableBase{IIdService idService;IISBNService isbnService;public ViewAViewModel(IIdService idServiceValue,IISBNService isbnServiceValue){idService = idServiceValue;isbnService = isbnServiceValue;ViewAMsg = $"View A:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";LoadDataCommand = new DelegateCommand(LoadDataCommandExecuted);InitTimer();}private void InitTimer(){System.Timers.Timer tmr= new System.Timers.Timer();tmr.Interval = 1000;tmr.Elapsed += Tmr_Elapsed;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ViewAMsg = $"View A:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";}private void LoadDataCommandExecuted(){BooksCollection = new ObservableCollection<Book>();for(int i = 1; i < 1001; i++){BooksCollection.Add(new Book(){Id = idService.GetID(),Name = $"Name_{i}",ISBN=isbnService.GetISBN(),Title=$"Title_{i}",Topic=$"Topic_{i}"});}}public DelegateCommand LoadDataCommand { get; set; }private string viewAMsg;public string ViewAMsg{get{return viewAMsg; }set{SetProperty(ref viewAMsg, value);}}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection;}set{SetProperty(ref booksCollection, value);}}} 
}//ViewB.xaml
<UserControl x:Class="WpfApp4.Views.ViewB"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApp4.Views"mc:Ignorable="d" xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"><UserControl.Background><ImageBrush ImageSource="/Images/2.jpg"/></UserControl.Background><Grid><TextBlock Text="{Binding ViewBMsg,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"><TextBlock.Style><Style TargetType="TextBlock"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Black"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></TextBlock.Style></TextBlock></Grid>
</UserControl>//ViewBViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WpfApp4.ViewModels
{public class ViewBViewModel : BindableBase{public ViewBViewModel(){ViewBMsg = $"View B:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";InitTimers();}private void InitTimers(){System.Timers.Timer tmr = new System.Timers.Timer();tmr.Elapsed += Tmr_Elapsed;tmr.Interval = 1000;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ViewBMsg = $"View B:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";}private string viewBMsg;public string ViewBMsg{get{return viewBMsg;}set{SetProperty(ref viewBMsg, value);}}}
}//IDService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WpfApp4.Services
{public interface IIdService{int GetID();}public class IdService : IIdService{int id = 0;public int GetID(){return Interlocked.Increment(ref id);}}
}//ISBNService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WpfApp4.Services
{public interface IISBNService{string GetISBN();}public class ISBNService : IISBNService{int idx = 0;public string GetISBN(){return $"ISBN_{Interlocked.Increment(ref idx)}_{Guid.NewGuid():N}";}}
}

 

 

 

 

 

image

 

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

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

相关文章

构建一个支撑10万设备的虚拟电厂IoT高效的平台

构建一个支撑10万设备的虚拟电厂IoT高效的平台pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

B1I、B1C、B2a双频北斗卫星定位芯片AT9850B-F7N-22

型号:AT9850B-F7N-22 卫星系统:B1I、B1C、B2a双频 芯片等级:工规 工作温度℃:-40~85 AT9850B-F7N-22是一款高性能低功耗双频单北斗卫星导航接收机SOC单芯片,芯片集成射频前端和数字基带、多模式卫星信号处理引擎…

2025 国产代码托管新局:Gitee 领跑本土生态 - 实践

2025 国产代码托管新局:Gitee 领跑本土生态 - 实践2025-09-24 18:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; disp…

Wi-Fi技能——网络安全

Wi-Fi技能——网络安全pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

石家庄手机网站建设公司教您如何申请企业邮箱

目录 什么是文件包含漏洞&#xff1f; 文件包含的环境要求 常见的文件包含函数 PHP伪协议 file://协议 php://协议 php://filter php://input zip://、bzip2://、zlib://协议 zip:// bzip2:// zlib:// data://协议 文件包含漏洞演示 案例1&#xff1a;php://inp…

idea打开properties文件中文乱码问题

1 修改file encoding配置 2 修改成utf8后,发现==号后面的中文还是显示的字母, 把transparent Native-to-ascii conversion的勾勾打上就可以了。

完整教程:【开源】基于STM32的智能车尾灯

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

专业模板网站制作网站维护中页面设计

模块的引入方式&#xff1a;1.import 模块名&#xff1a;导入模块中的所有内容&#xff08;引入多个用逗号分隔&#xff09;import random,time2.from 模块名 import 函数名1&#xff0c;函数名2...导入部分模块&#xff08;导入部分的话直接使用&#xff09;3.from 模块名 imp…

机动数据集ESA

机动数据集ESA哨兵1卫星 S1 处理 POD的卫星参数,提供了质量和机动的历史文件。不过好像是用于轨道确定的,我要怎么用它还要再琢磨一下。 哥白尼门户网站提供的 哨兵1卫星 的数据 哨兵-1 |哥白尼数据空间生态系统 我国…

人机共生:AI如何重塑招聘全流程,赋能HR战略升级

当前,中国 AI 招聘市场已从 “技术概念” 成为 HR 应对招聘痛点的 “刚需工具”。那么,让我们聚焦更具实操价值的 “全流程场景落地” 与 “行业挑战突破”,结合 HR 日常工作中的真实痛点,分析 AI 如何渗透招聘各环…

hot100题简单题

力扣136题 只出现一次的数字采用异或的方法class Solution { public:int singleNumber(vector<int>& nums) {int x = 0;for(int num:nums){ //1.遍历 numx执行异或运算x ^= num;}return x; …

python自动化操作PDF

一、模块安装pip install pypdf2 -i https://pypi.tuna.tsinghua.edu.cn/simple #模块主要作用: 读取、写入、分割、合并PDF文件 pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple #模块主要作用…

注意事项

线段树调用 build 的时候注意是否 \(l>r\),否则会爆。 写 __int128 之类的输出判断值为 0。

完整教程:【数据结构】 ArrayList深入解析

完整教程:【数据结构】 ArrayList深入解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

完整教程:PyCharm 在 Linux 上的安装指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

产品经理如何借力项目管理软件,驾驭复杂项目并准时上线?

在缺乏专职项目经理的团队中,产品经理常需身兼数职,确保项目按时交付。本文将以敏捷项目管理思维为纲,结合PMP等经典理论,拆解项目启动、实施、收尾三大阶段的核心要点,并详解如何利用PJMan项目进度管理软件将方法…

网站死循环上海比较好的服装外贸公司

在Linux操作系统下进行开发&#xff0c;编写Makefile似乎是不可缺少的事情。但是对于一个比较大的工程&#xff0c;编写一个符合规范的Makefile并非易事。而且由于Makefile的各种显式&#xff0c;隐式规则&#xff0c;加之平时并不经常编写Makefile&#xff0c;导致我们写一个M…

朝阳网站开发联系电话网站备案信息核验单

简介&#xff1a; ![img](https://img.alicdn.com/tfs/TB1ZTW4VEY1gK0jSZFMXXaWcVXa-2304-1194.png) **越高级别的程序员往往越看重代码质量。** 本篇文章主要聊一下在团队开发过程中&#xff0c;如何做到代码质量的管控与提升。首先需要有一套规范&#xff0c;定义什么是好的代…

分布式 ID 生成方案实战指南:从选型到落地的全场景避坑手册(二) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …