using MembranePoreTester.ViewModels; using System.Windows; using System.Windows.Controls; namespace MembranePoreTester.Views { public partial class PoreDistributionView : UserControl { private MainViewModel _mainVM; public PoreDistributionView() { InitializeComponent(); this.IsVisibleChanged += (s, e) => { if (this.DataContext is PoreDistributionViewModel vm) { System.Diagnostics.Debug.WriteLine($"工位{vm.StationId} IsVisible={this.IsVisible}"); vm.IsActive = this.IsVisible; if (this.IsVisible) { vm.RefreshPlot(); // 新增这一行 } } }; this.Loaded += OnLoaded; } private void OnLoaded(object sender, RoutedEventArgs e) { // 保留原有滚动功能 var vm = this.DataContext as PoreDistributionViewModel; if (vm != null) { vm.Record.DataPoints.CollectionChanged += DataPoints_CollectionChanged; } // 获取主窗口 ViewModel _mainVM = Application.Current.MainWindow?.DataContext as MainViewModel; if (_mainVM == null) return; // 为每个工位订阅 PropertyChanged,实时更新对应的 PlotView 模型 for (int i = 0; i < _mainVM.Stations.Count; i++) { int stationId = i + 1; var stationVm = _mainVM.Stations[i].PoreDistributionVM; stationVm.PropertyChanged += (s, ev) => { if (ev.PropertyName == nameof(PoreDistributionViewModel.PlotModel)) { Dispatcher.Invoke(() => { switch (stationId) { case 1: PlotViewStation1.Model = stationVm.PlotModel; break; case 2: PlotViewStation2.Model = stationVm.PlotModel; break; case 3: PlotViewStation3.Model = stationVm.PlotModel; break; } }); } }; // 初始化当前模型 if (stationVm.PlotModel != null) { switch (stationId) { case 1: PlotViewStation1.Model = stationVm.PlotModel; break; case 2: PlotViewStation2.Model = stationVm.PlotModel; break; case 3: PlotViewStation3.Model = stationVm.PlotModel; break; } } } // 监听当前 DataContext 变化,切换可见性 this.DataContextChanged += (s, ev) => UpdateVisibility(); UpdateVisibility(); } private void UpdateVisibility() { if (this.DataContext is PoreDistributionViewModel vm) { PlotViewStation1.Visibility = vm.StationId == 1 ? Visibility.Visible : Visibility.Collapsed; PlotViewStation2.Visibility = vm.StationId == 2 ? Visibility.Visible : Visibility.Collapsed; PlotViewStation3.Visibility = vm.StationId == 3 ? Visibility.Visible : Visibility.Collapsed; } } private void Button_Click(object sender, RoutedEventArgs e) { } private void DataPoints_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { //ScrollDataGridToEnd(dgWetData); //ScrollDataGridToEnd(dgDryData); } } private void ScrollDataGridToEnd(DataGrid dataGrid) { if (dataGrid.Items.Count > 0) { dataGrid.ScrollIntoView(dataGrid.Items[dataGrid.Items.Count - 1]); } } } }