WPF---Prism视图传参

Prism视图传参方式。
实际应用场景

点击tabitem中的列表数据,同步更新到ListStatic Region对应的界面。目前用两种方式实现了传参数据同步。

第一,事件聚合器(EventAggregator)

1. 定义事件

创建一个事件类,用于传递数据。

using Prism.Events;public class DataUpdateEvent : PubSubEvent<string>
{
}

点击tabitem中的列表 ,示例传参数据是string类型,什么参数类型都可以。

2. 注册事件聚合器

App.xaml.cs 中注册事件聚合器。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{containerRegistry.RegisterSingleton<IEventAggregator, EventAggregator>();containerRegistry.RegisterForNavigation<Tab1View, Tab1ViewModel>();containerRegistry.RegisterForNavigation<ListStaticView, ListStaticViewModel>();
}

3. 定义视图和视图模型

Tab1View.xaml
<UserControl x:Class="YourNamespace.Tab1View"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"xmlns:prism="http://prismlibrary.com/"><Grid><DataGrid ItemsSource="{Binding DataList}" SelectedItem="{Binding SelectedItem}"><i:Interaction.Triggers><i:EventTrigger EventName="SelectionChanged"><prism:InvokeCommandAction Command="{Binding ItemSelectedCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=DataGrid}}"/></i:EventTrigger></i:Interaction.Triggers></DataGrid></Grid>
</UserControl>

Tab1ViewModel.cs

using Prism.Commands;
using Prism.Mvvm;
using Prism.Events;
using System.Collections.ObjectModel;public class Tab1ViewModel : BindableBase
{private readonly IEventAggregator _eventAggregator;private string _selectedItem;public ObservableCollection<string> DataList { get; private set; }public string SelectedItem{get { return _selectedItem; }set { SetProperty(ref _selectedItem, value); }}public DelegateCommand<string> ItemSelectedCommand { get; private set; }public Tab1ViewModel(IEventAggregator eventAggregator){_eventAggregator = eventAggregator;DataList = new ObservableCollection<string> { "Item 1", "Item 2", "Item 3" };ItemSelectedCommand = new DelegateCommand<string>(OnItemSelected);}private void OnItemSelected(string selectedItem){if (selectedItem != null){_eventAggregator.GetEvent<DataUpdateEvent>().Publish(selectedItem);}}
}

 ListStaticView.xaml

<UserControl x:Class="YourNamespace.ListStaticView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Grid><TextBlock Text="{Binding UpdatedData}" /></Grid>
</UserControl>

ListStaticViewModel.cs

using Prism.Mvvm;
using Prism.Events;public class ListStaticViewModel : BindableBase
{private readonly IEventAggregator _eventAggregator;private string _updatedData;public string UpdatedData{get { return _updatedData; }set { SetProperty(ref _updatedData, value); }}public ListStaticViewModel(IEventAggregator eventAggregator){_eventAggregator = eventAggregator;_eventAggregator.GetEvent<DataUpdateEvent>().Subscribe(OnDataUpdate);}private void OnDataUpdate(string updatedData){UpdatedData = updatedData;}
}

4. 定义主窗口布局

MainWindow.xaml
<Window x:Class="YourNamespace.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/"><Grid><TabControl Grid.Column="0"><TabItem Header="患者列表" prism:RegionManager.RegionName="Tab1Region"/><TabItem Header="到检列表" prism:RegionManager.RegionName="Tab2Region"/><TabItem Header="WorkList" prism:RegionManager.RegionName="Tab3Region"/></TabControl><ContentControl Margin="300 0 0 0" prism:RegionManager.RegionName="ListStatic"/></Grid>
</Window>

5. 配置导航

确保在应用启动时正确导航到初始视图。

MainWindowViewModel.cs
using Prism.Mvvm;
using Prism.Regions;public class MainWindowViewModel : BindableBase
{private readonly IRegionManager _regionManager;public MainWindowViewModel(IRegionManager regionManager){_regionManager = regionManager;_regionManager.RegisterViewWithRegion("Tab1Region", typeof(Tab1View));_regionManager.RegisterViewWithRegion("ListStatic", typeof(ListStaticView));}
}
第二,使用共享服务

使用共享服务可以在视图之间共享数据,并在一个视图中更新数据时通知另一个视图进行更新。

1. 定义共享服务
public interface ISharedDataService
{string SharedData { get; set; }event Action<string> DataChanged;void UpdateData(string data);
}public class SharedDataService : ISharedDataService
{private string _sharedData;public string SharedData{get => _sharedData;set{_sharedData = value;DataChanged?.Invoke(_sharedData);}}public event Action<string> DataChanged;public void UpdateData(string data){SharedData = data;}
}
2. 注册服务

App.xaml.cs 中注册服务。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{containerRegistry.RegisterSingleton<ISharedDataService, SharedDataService>();containerRegistry.RegisterForNavigation<Tab1View, Tab1ViewModel>();containerRegistry.RegisterForNavigation<ListStaticView, ListStaticViewModel>();
}
3. 使用共享服务
Tab1ViewModel.cs
using Prism.Commands;
using Prism.Mvvm;
using System.Collections.ObjectModel;public class Tab1ViewModel : BindableBase
{private readonly ISharedDataService _sharedDataService;private string _selectedItem;public ObservableCollection<string> DataList { get; private set; }public string SelectedItem{get { return _selectedItem; }set { SetProperty(ref _selectedItem, value); }}public DelegateCommand<string> ItemSelectedCommand { get; private set; }public Tab1ViewModel(ISharedDataService sharedDataService){_sharedDataService = sharedDataService;DataList = new ObservableCollection<string> { "Item 1", "Item 2", "Item 3" };ItemSelectedCommand = new DelegateCommand<string>(OnItemSelected);}private void OnItemSelected(string selectedItem){if (selectedItem != null){_sharedDataService.UpdateData(selectedItem);}}
}

ListStaticViewModel.cs

using Prism.Mvvm;public class ListStaticViewModel : BindableBase
{private readonly ISharedDataService _sharedDataService;private string _updatedData;public string UpdatedData{get { return _updatedData; }set { SetProperty(ref _updatedData, value); }}public ListStaticViewModel(ISharedDataService sharedDataService){_sharedDataService = sharedDataService;_sharedDataService.DataChanged += OnDataChanged;}private void OnDataChanged(string updatedData){UpdatedData = updatedData;}
}

以上两种方法都可以实现从 Tab1Region 中的列表数据同步更新到 ListStatic 区域。

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

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

相关文章

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1&#xff1a;问题现象&#xff1a;问题分析&#xff1a; 问题2&#xff1a;问题现象&#xff1a;问题分析&#xff1a;解决方案&#xff1a; 事后现象 事前现象 问题1&#xff1a; 问题现象&#xff1a; 在本地调试时&#xff0c;一切顺利&#xff0c;但一…

JAVA开源的html转pdf、png转pdf项目

总览 Open HTML to PDF是一个纯Java库,用于使用CSS 2.1(以及更高版本的标准)对合理子集的格式良好的XML/XHTML(甚至一些HTML5)进行布局和格式化,输出为PDF或图像。 使用该库生成漂亮的PDF文档。但请注意,您不能将现代HTML5+直接应用于该引擎并期望获得出色的结果。您必…

妈吖,看过这个大厂的oracle主键自增,我的信心暴增!信创,国产数据库也能行。

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 1.数据库oracle自增主键字段思维导图 在Oracle数据库中&#xff0c;可以通过创建序列&#xff08;SEQUENCE&#xff09;来实现自增功能。但也可以不在数据库中实现&#xff0c;而是通过程…

Docker中使用自定义网络方式实现Redis集群部署与测试流程

场景 Docker中Docker网络-理解Docker0与自定义网络的使用示例&#xff1a; Docker中Docker网络-理解Docker0与自定义网络的使用示例-CSDN博客 参考上面的流程实现自定义网络的实现。 下面记录其应用实例&#xff0c;使用Docker的自定义网络实现redis集群部署。 注&#xf…

vue3数据结构的渲染01

处理数据&#xff1a; //现有原始数据showCertificateUrl “url01;url02” 使用以下代码将两条通过分号";"分割的url进行处理 const parseUrls () > {urls.value [];// 每次重新赋值前一定要清空之前的旧数据&#xff01;if (!showCertificateUrl.value) {retu…

数模打怪(八)之图论模型

一、作图 图的数学语言描述&#xff1a; G( V(G), E(G) )&#xff0c;G&#xff08;graph&#xff09;&#xff1a;图&#xff0c;V&#xff08;vertex&#xff09;&#xff1a;顶点集&#xff0c;E&#xff08;edge&#xff09;&#xff1a;边集 1、在线作图 https://csac…

自闭症儿童能否上学:家长的选择与困惑

在自闭症儿童的成长旅程中&#xff0c;上学这一关键议题常常使家长陷入异常艰难的抉择和无尽的困惑之中。对于自闭症儿童究竟能否上学&#xff0c;家长们不得不面对众多纷繁复杂且至关重要的考量因素。 一方面&#xff0c;家长们怀揣着美好的期望&#xff0c;渴望孩子能够融入正…

C# 使用pythonnet 迁入 python 初始化错误解决办法

pythonnet 从 3.0 版本开始&#xff0c;必须设置Runtime.PythonDLL属性或环境变量 例如&#xff1a; string pathToVirtualEnv ".\\envs\\pythonnetTest"; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, "python39.dll"); PythonEngine.PythonHom…

知识图谱增强的RAG(KG-RAG)详细解析

转自&#xff1a;知识图谱科技 这是一个与任务无关的框架&#xff0c;它将知识图谱&#xff08;KG&#xff09;的显性知识与大型语言模型&#xff08;LLM&#xff09;的隐含知识结合起来。这是该工作的arXiv预印本 https://arxiv.org/abs/2311.17330 。 我们在这里利用一个名为…

linux中mysql的安装使用(普通版版本+docker版本)

linux中mysql的安装使用 一、普通安装1.下载安装包2.流程 二、用docker安装1.拉取mysql镜像2.启动镜像3.开启权限第一种情况第二种情况 三、用Navicat连接 一、普通安装 1.下载安装包 挑选个你喜欢的目录&#xff0c;用wget下载并且解压 wget http://dev.mysql.com/get/Down…

Java人力资源招聘社会校招类型招聘系统PC端

&#x1f50d;【揭秘】人力资源新利器&#xff01;社会校招一站式PC端招聘系统全攻略&#x1f680; &#x1f308; 开篇引言&#xff1a;招聘新纪元&#xff0c;效率为王&#xff01; Hey小伙伴们&#xff0c;你是否还在为繁琐的招聘流程头疼不已&#xff1f;&#x1f92f; 面…

京东商品详情API:多规格商品的返回值处理

处理京东商品详情API中关于多规格商品的返回值&#xff0c;首先需要了解京东API的返回数据结构。通常&#xff0c;对于多规格商品&#xff08;如不同颜色、尺寸等选项的商品&#xff09;&#xff0c;API会返回一个包含多个规格选项和对应价格、库存等信息的复杂数据结构。 以下…

【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施

目录 前言一、软件更新流程中的风险管理和质量控制机制&#xff08;一&#xff09;测试流程及风险识别&#xff08;二&#xff09;风险管理策略&#xff08;三&#xff09;质量控制措施 二、预防类似大规模故障的最佳方案或应急响应对策&#xff08;一&#xff09;冗余系统设计…

.NET 一款获取主流浏览器存储密码的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【解决方案】华普微基于CMT2150A自发电无线遥控解决方案

一、方案概述 自发电无线遥控设备的概念是指设备自身能够通过能量收集技术&#xff0c;如太阳能、动能收集或其他可再生能源&#xff0c;产生所需的电能来供电&#xff0c;而无需更换电池或外部电源。这种技术的应用可以减少对电池的依赖&#xff0c;降低对环境的影响&#xf…

github好用工具分享——lux:一键获取视频指令

我们在学习工作中需要大量的数据信息&#xff0c;然而这些数据有什么获取很麻烦&#xff0c;尤其是视频下载资源&#xff0c;那么有没有一种工具即简单方便又实用呢&#xff1f; 接下来我会向大家介绍lux工具的使用&#xff0c;lux是非常方便的获取视频资源指令&#xff0c;只需…

前端拥抱AI:LangChain.js 入门遇山开路之PromptTemplate

PromptTemplate是什么 PromptTemplate是一个可重复使用的模板&#xff0c;用于生成引导模型生成特定输出的文本。与Prompt的区别: PromptTemplate相对于普通Prompt的优势&#xff0c;即其灵活性和可定制性。 简单了解PromptTemplate后&#xff0c;咱们就来聊聊LangChain里的P…

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类&#xff08;自增运算符&#xff09;、--&#xff08;自减运算符&#xff09;赋值运算符逗号运算符&#xff08;顺序求值运算符&#xff09; 表达式 运算符 运算符的分类 C语言的运算符范围很宽&#xff0c;除了控制语句和输入输出…

如何安装python

以下的安装仅针对Windows10系统 一、下载python和解释器 解释器下载 第一步&#xff0c;找到下载的地方 1.找到官网 2.直接点击地址链接 Python Release Python 3.7.2 | Python.org 第二步&#xff0c;找到对应的版本进行安装 进入页面之后&#xff0c;下滑&#xff0c;…

【学术会议征稿】第六届土木建筑与城市工程国际学术会议(ICCAUE 2024)

第六届土木建筑与城市工程国际学术会议&#xff08;ICCAUE 2024&#xff09; 2024 6th International Conference on Civil Architecture and Urban Engineering (ICCAUE 2024) 第六届土木建筑与城市工程国际学术会议&#xff08;ICCAUE 2024&#xff09;将于2024年11月15-17…