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

WPF Prism register interface and implemented interface service

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.zskr.cn/news/11053.html

相关文章:

  • 人机共生:AI如何重塑招聘全流程,赋能HR战略升级
  • hot100题简单题
  • 注意事项
  • 产品经理如何借力项目管理软件,驾驭复杂项目并准时上线?
  • 程序员的旅行神器:用AI提示词工程解决选择困难症
  • 西电PCB设计指南第4章学习笔记
  • 读取zip包中的文件
  • Attention复杂度解析与改进方向
  • 三维模型非结构化网格生成
  • Playwright MCP浏览器自动化指南 - 详解
  • 完整教程:【C++】STL简介+编码表+string引入
  • 基于节流的流水线并行推理优化——gLLM
  • Corral the Cows
  • 从范德蒙德矩阵聊开去.
  • Ansible自动化管理 - 指南
  • Python 并发编程
  • 统计机器学习经典分类算法MATLAB实现
  • 299、已凉
  • WPF的数据绑定之通知修改
  • matlab运行时遇到的license问题
  • HarmonyOS之设备硬件能力调用:传感器、蓝牙与定位
  • 基于HarmonyOS SDK开放能力的微博社交体验构建实践
  • web三维
  • HarmonyOS 多线程编程:Worker 使用与性能优化指南
  • HarmonyOS服务卡片开发:动态卡片与数据绑定实战指南
  • HarmonyOS后台任务调度:JobScheduler与WorkManager实战指南
  • 总线传输的四个阶段
  • What is bad statistics
  • 完整教程:SWR:React 数据获取的现代解决方案
  • PyTorch 神经网络工具箱 - 实践