Files
VacuumPressureMembranePoreS…/Views/PoreDistributionView.xaml.cs
2026-04-12 20:22:21 +08:00

111 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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]);
}
}
}
}