WPF Prism.Wpf RegionManager

news/2025/10/8 13:53:01/文章来源:https://www.cnblogs.com/Fred1987/p/19129547
Install-Package Prism.Wpf;
Install-Package Prism.DryIOC;

 

<Window x:Class="WpfApp28.Views.MainWin"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:prism="http://prismlibrary.com/"xmlns:local="clr-namespace:WpfApp28.Views"WindowState="Maximized"mc:Ignorable="d"Title="MainWin" Height="450" Width="800"prism:ViewModelLocator.AutoWireViewModel="True" ><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock Text="{Binding MainStatus}" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"FontSize="30"/><ContentControl Grid.Row="1" Grid.Column="0"prism:RegionManager.RegionName="DgRegion"/><ContentControl Grid.Row="1" Grid.Column="1"prism:RegionManager.RegionName="ImageRegion"/></Grid>
</Window>using System.Configuration;
using System.Data;
using System.Windows;
using WpfApp28.Services;
using WpfApp28.ViewModels;
using WpfApp28.Views;namespace WpfApp28
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWin>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIDService, IDService>();containerRegistry.Register<INameService, NameService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<DgView, DgViewModel>("DgView");containerRegistry.RegisterForNavigation<ImageView, ImageViewModel>("ImgView");}protected override void OnInitialized(){base.OnInitialized();//var mainWin=Container.Resolve<MainWin>();//mainWin?.Show();var regionManager = Container.Resolve<IRegionManager>();regionManager.RequestNavigate("DgRegion", "DgView");regionManager.RequestNavigate("ImageRegion", "ImgView");}}}

 

 

image

 

 

 

 

image

 

 

 

image

 

 

image

 

 

 

 

 

 

//MainWin.xaml
<Window x:Class="WpfApp28.Views.MainWin"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:prism="http://prismlibrary.com/"xmlns:local="clr-namespace:WpfApp28.Views"WindowState="Maximized"mc:Ignorable="d"Title="MainWin" Height="450" Width="800"prism:ViewModelLocator.AutoWireViewModel="True" ><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock Text="{Binding MainStatus}" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"FontSize="30"/><ContentControl Grid.Row="1" Grid.Column="0"prism:RegionManager.RegionName="DgRegion"/><ContentControl Grid.Row="1" Grid.Column="1"prism:RegionManager.RegionName="ImageRegion"/></Grid>
</Window>
//MainWinViewModel.cs
using System;
using System.Collections.Generic;
using System.Text;namespace WpfApp28.ViewModels
{public class MainWinViewModel:BindableBase{UInt128 idx = 0;public MainWinViewModel(){MainStatus = $"{++idx}_{Guid.NewGuid():N}_" +$"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}";Task.Run(() =>{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){MainStatus = $"{++idx}_{Guid.NewGuid():N}_" +$"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}";}private string mainStatus;public string MainStatus{get{return mainStatus; }set{SetProperty(ref mainStatus, value);}}}
}//App.xaml
<prism:PrismApplication x:Class="WpfApp28.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp28"xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>//App.xaml.cs
using System.Configuration;
using System.Data;
using System.Windows;
using WpfApp28.Services;
using WpfApp28.ViewModels;
using WpfApp28.Views;namespace WpfApp28
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWin>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIDService, IDService>();containerRegistry.Register<INameService, NameService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<DgView, DgViewModel>("DgView");containerRegistry.RegisterForNavigation<ImageView, ImageViewModel>("ImgView");}protected override void OnInitialized(){base.OnInitialized();//var mainWin=Container.Resolve<MainWin>();//mainWin?.Show();var regionManager = Container.Resolve<IRegionManager>();regionManager.RequestNavigate("DgRegion", "DgView");regionManager.RequestNavigate("ImageRegion", "ImgView");}}}//DgView.xaml
<UserControl x:Class="WpfApp28.Views.DgView"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/"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"prism:ViewModelLocator.AutoWireViewModel="True"xmlns:local="clr-namespace:WpfApp28.Views"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><Grid><DataGrid ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLengthUnit="Item"VirtualizingPanel.CacheLength="2,2"ScrollViewer.IsDeferredScrollingEnabled="True"ScrollViewer.CanContentScroll="True"AutoGenerateColumns="True"FontSize="20"CanUserAddRows="False"></DataGrid></Grid>
</UserControl>//DgView.xaml.cs
using System;
using System.Collections.Generic;
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 WpfApp28.ViewModels;namespace WpfApp28.Views
{/// <summary>/// Interaction logic for DgView.xaml/// </summary>public partial class DgView : UserControl{public DgView(){InitializeComponent();this.Loaded += async (s, e) =>{var vm = this.DataContext as DgViewModel;if (vm != null){await vm.InitBooksCollection();}};}}
}//DgViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Text;
using WpfApp28.Models;
using WpfApp28.Services;namespace WpfApp28.ViewModels
{public class DgViewModel:BindableBase{IIDService idService;INameService nameService;IISBNService isbnService;public DgViewModel(IIDService idServiceValue,INameService nameServiceValue,IISBNService isbnServiceValue){idService = idServiceValue;nameService = nameServiceValue;isbnService = isbnServiceValue;}public async Task InitBooksCollection(){BooksCollection = new ObservableCollection<Book>();List<Book> booksList= new List<Book>();for(int i=1;i<1000001;i++){booksList.Add(new Book(){Id = idService.GetID(),Name = nameService.GetName(),ISBN = isbnService.GetISBN(),Title = $"Title_{i}",Topic = $"Topic_{i}"});if (i % 10000 == 0){await PopulateBooksCollectionAsync(booksList);}}if(booksList.Any()){await PopulateBooksCollectionAsync(booksList);}}private async Task PopulateBooksCollectionAsync(List<Book> booksList){var tempList = booksList.ToList();booksList.Clear();await System.Windows.Application.Current.Dispatcher.InvokeAsync(async () =>{foreach (var bk in tempList){BooksCollection.Add(bk);}}, System.Windows.Threading.DispatcherPriority.Background);}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection; }set{SetProperty(ref booksCollection, value);}}}
}//ImageView.xaml
<UserControl x:Class="WpfApp28.Views.ImageView"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/"prism:ViewModelLocator.AutoWireViewModel="True"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"xmlns:local="clr-namespace:WpfApp28.Views"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><Grid><Grid.Background><ImageBrush ImageSource="{Binding ImgSource}" Stretch="Uniform"/></Grid.Background><TextBlock Text="{Binding ImgUrl}"HorizontalAlignment="Stretch"VerticalAlignment="Center"Foreground="Red"FontSize="50"TextWrapping="Wrap"/></Grid>
</UserControl>//ImageViewModel.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Media;
using System.Windows.Media.Imaging;namespace WpfApp28.ViewModels
{public class ImageViewModel : BindableBase{List<string> imgsList = new List<string>();int imgsCount = 0;int imgIdx = 0;public ImageViewModel(){InitImgs();Task.Run(() =>{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){System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>{ImgUrl = System.IO.Path.GetFullPath(imgsList[(++imgIdx) % imgsCount]);ImgSource = GenImageSourceViaUrl(ImgUrl);}));            }private void InitImgs(){string imgDir = @"../../../Images";if (!Directory.Exists(imgDir)){return;}imgsList = Directory.GetFiles(imgDir).ToList();if (imgsList == null || !imgsList.Any()){return;}imgsCount = imgsList.Count;ImgUrl = System.IO.Path.GetFullPath(imgsList[0]);ImgSource = GenImageSourceViaUrl(ImgUrl);            }private ImageSource GenImageSourceViaUrl(string imgUrl){BitmapImage bmi = new BitmapImage();if(!File.Exists(imgUrl)){return bmi; }bmi.BeginInit();bmi.UriSource=new Uri(imgUrl,UriKind.RelativeOrAbsolute);bmi.EndInit();if(bmi.CanFreeze){bmi.Freeze();}return bmi;}private ImageSource imgSource;public ImageSource ImgSource{get{return imgSource;}set{SetProperty(ref imgSource, value);}}private string imgUrl;public string ImgUrl{get{return imgUrl;}set{SetProperty(ref imgUrl, value);}}}
}//Service.cs
using System;
using System.Collections.Generic;
using System.Text;namespace WpfApp28.Services
{public interface IIDService{int GetID();}public class IDService : IIDService{int idx = 0;public int GetID(){return Interlocked.Increment(ref idx);}}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}";}}
}//Book.cs
using System;
using System.Collections.Generic;
using System.Text;namespace WpfApp28.Models
{public class Book{public int Id { get; set; }public string Name { get; set; }public string ISBN { get; set;  }public string Title { get;set;  }public string Topic { get; set;  }}
}

 

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

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

相关文章

题解:AT_agc065_d [AGC065D] Not Intersect

很牛的题。 题意:很简单了,不再赘述。 做法: 首先需要一个 Raney 引理:对于整数序列 \(a\),若 \(\sum a = 1\),则有且仅有一个 \(a\) 的循环位移满足前缀和均大于 \(0\)。 来简单证明一下,首先不会有两个及以上…

uniapp滚动导航 - unique

下面是效果图下面是实现代码<template><view class="container"><!-- 顶部导航 --><view class="navbar"><viewv-for="(item, index) in navList":key=&quo…

公司网站运营淮北建网站

一、概念 Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM &#xff09;是定义了线程和主内存之间的抽象关系&#xff0c;即 J…

三门网站制作峡江网站建设

背景&#xff1a;之前资产信息用网络接口进行数据推送&#xff0c;但是接口推送需要验证而且反应较慢。Kafak中间件提供了另一种可行的数据推送方式&#xff0c;它可以进行消息队列推送&#xff0c;且反应速度快。但是Kafka需部署在公网环境&#xff0c;并进行登录验证&#xf…

网站建设与维护视频教程篡改 网站 支付接口

面试经典&#xff08;4/150&#xff09;删除有序数组中的重复项 II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c; 返回删除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须在 原…

滚动导航 - unique

下面是效果图下面是实现代码<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><title>滚动导航 Demo</title><style>body {margin:…

windows剪切板工具

列表 不推荐 ditto 界面我不喜欢,作为一个前台交互软件,用户界面搞得这么小,图片都看不清。CrossPaste 还行,但是没有标签或者说分类。 也没有导出功能。 不知道为啥,窗口总是不置顶。 提供了多种类型,算是比较现…

C#基础:启用线程池执行并行任务

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

做字素的网站wordpress get option

从各方面来看&#xff0c;互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年&#xff0c;可能是由于 IPv4 地址资源的枯竭&#xff0c;IPv6 的使用处于上升态势。相应的&#xff0c;开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是&#xff0c;正如近期 OpenBSD 邮…

P1545 [USACO04DEC] Dividing the Path G 题解

P1545 [USACO04DEC] Dividing the Path G 题解 最近开始快刷蓝紫黑了,做完会写题解交上来。 题目传送门 题意 一条长为 \(L(1 \le L \le 10^6 , 2 | L)\) 的线段上,给出 \(N(1 \le N \le 10^3)\) 个可能相交的子段 \…

AJ-Report - 实践

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

视频采集程序

项目结构:VideoCaptureApp.pro QT += core gui multimedia multimediawidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11win32 { LIBS += -L$$PWD/lib/SDL2/lib/x64 \-L$$PWD/lib/ffmpeg…

怎么做网站弄网盟wordpress qq微博

【客户行业】金属加工行业 【问题类型】薪酬体系/激励体系 【客户背景】 某大型金属加工企业位于河北地区&#xff0c;成立于2000年&#xff0c;隶属于某大型有色金属集团&#xff0c;是一家集科研、开发、生产、销售于一体的国有企业&#xff0c;人员达到1000人。经过多年…

50m专线做视频网站青羊区城乡建设网站

很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时&#xff0c;总会弹出宏安全警告&#xff0c;这让使用者倍感麻烦。而如果把宏的安全级设置为“低”&#xff0c;就可以取消excel中宏安全提示框了&#xff0c;又增加了恶意代码和病毒攻击…

关于PPT的课后作业

动手动脑问题应用的是方法重载。 课后作业代码: import java.util.*; public class ArithmeticExam { private static final Random random = new Random(); private static final Scanner scanner = new Scanner(Sys…

学校网站源码html高端网站建设的品牌

I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如然后再确认IIS版本信息 -> 打开IIS管理工具即可接着确认.NET Framework的版本可以在系统命令行工具执行:…

引擎搜索网站模板化学sem是什么意思

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

RK 系列 GPU 驱动检查方法

问题背景 在调试一块板卡时发现 GPU 驱动存在异常。当时通过 GST 播放视频,想查看 GPU 占用率,却发现按照 RK 系列通常的查询方法无法获取(设备节点不存在),由此怀疑 GPU 驱动未正常加载。 检查方法 方法一:查看…

Day-15【选择与循环】选择结构-if语句 - 实践

Day-15【选择与循环】选择结构-if语句 - 实践2025-10-08 13:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

做义工旅行有哪些网站wordpress验证码

Oracle提示错误消息ORA-28001: the password has expired&#xff0c;是由于Oracle11G的新特性所致&#xff0c; Oracle11G创建用户时缺省密码过期限制是180天&#xff08;即6个月&#xff09;&#xff0c; 如果超过180天用户密码未做修改则该用户无法登录。 Oracle公司是为了数…