
点击tabitem中的列表数据,同步更新到ListStatic Region对应的界面。目前用两种方式实现了传参数据同步。
创建一个事件类,用于传递数据。
using Prism.Events; public class DataUpdateEvent : PubSubEvent { } 点击tabitem中的列表 ,示例传参数据是string类型,什么参数类型都可以。
在 App.xaml.cs 中注册事件聚合器。
protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterSingleton(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); } 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; } } 确保在应用启动时正确导航到初始视图。
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)); } } 使用共享服务可以在视图之间共享数据,并在一个视图中更新数据时通知另一个视图进行更新。
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; } } 在 App.xaml.cs 中注册服务。
protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterSingleton(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); } 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 区域。
上一篇:WPF多语言国际化,中英文切换
下一篇:什么是漏洞扫描技术