WPF---Prism视图传参
创始人
2024-11-23 02:07:46
Prism视图传参方式。
实际应用场景

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

第一,事件聚合器(EventAggregator)

1. 定义事件

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

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

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

2. 注册事件聚合器

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

protected override void RegisterTypes(IContainerRegistry containerRegistry) {     containerRegistry.RegisterSingleton();     containerRegistry.RegisterForNavigation();     containerRegistry.RegisterForNavigation(); } 

3. 定义视图和视图模型

Tab1View.xaml
                                                                                                               

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 DataList { get; private set; }     public string SelectedItem     {         get { return _selectedItem; }         set { SetProperty(ref _selectedItem, value); }     }      public DelegateCommand ItemSelectedCommand { get; private set; }      public Tab1ViewModel(IEventAggregator eventAggregator)     {         _eventAggregator = eventAggregator;         DataList = new ObservableCollection { "Item 1", "Item 2", "Item 3" };         ItemSelectedCommand = new DelegateCommand(OnItemSelected);     }      private void OnItemSelected(string selectedItem)     {         if (selectedItem != null)         {             _eventAggregator.GetEvent().Publish(selectedItem);         }     } } 

 ListStaticView.xaml

                     

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().Subscribe(OnDataUpdate);     }      private void OnDataUpdate(string updatedData)     {         UpdatedData = updatedData;     } } 

4. 定义主窗口布局

MainWindow.xaml
                                                                              

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 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 DataChanged;      public void UpdateData(string data)     {         SharedData = data;     } } 
2. 注册服务

App.xaml.cs 中注册服务。

protected override void RegisterTypes(IContainerRegistry containerRegistry) {     containerRegistry.RegisterSingleton();     containerRegistry.RegisterForNavigation();     containerRegistry.RegisterForNavigation(); } 
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 DataList { get; private set; }     public string SelectedItem     {         get { return _selectedItem; }         set { SetProperty(ref _selectedItem, value); }     }      public DelegateCommand ItemSelectedCommand { get; private set; }      public Tab1ViewModel(ISharedDataService sharedDataService)     {         _sharedDataService = sharedDataService;         DataList = new ObservableCollection { "Item 1", "Item 2", "Item 3" };         ItemSelectedCommand = new DelegateCommand(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 区域。

相关内容

热门资讯

如何从0到1打造微博热搜 在当下的互联网生态中,微博热搜已成为话题发酵、流量聚集的重要平台。一个爆款热搜话题,能在短时间内带来...
四川“扫码飞”第二批试点空域上... 从5月4日起,四川省无人机便捷飞行小程序“扫码飞”第二批试点空域陆续上线,共释放空域面积约6.7平方...
原创 科... 地球根本不是我们的家园,而是一座被精心设计的巨型监狱,太阳系就是牢不可破的牢笼,不管人类科技再发达,...
液体灌装机选型指南:无锡诺亚机... 导语:液体灌装机作为日化、食品、医药等行业产线中的核心设备,其稳定性、精度及服务响应能力直接影响生产...
仿人机器人触觉与语音技术正加速... 仿人机器人正快速从工厂、物流场景向更广泛的通用场景拓展,甚至逐步迈入家庭,成为老年人的陪伴与助理。这...