桌面端密炼计划、胶料快检调整

This commit is contained in:
2026-06-18 15:18:11 +08:00
parent 372dc10be2
commit c54d54b40f
20 changed files with 1509 additions and 311 deletions

View File

@@ -1,72 +1,118 @@
using System.Collections.Specialized;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using YY.Admin.ViewModels.RubberQuickTest;
namespace YY.Admin.Views.RubberQuickTest;
public partial class RubberQuickTestOperationView : UserControl
{
private RubberQuickTestOperationViewModel? _vm;
private RubberQuickTestOperationViewModel? _vm;
public RubberQuickTestOperationView()
{
InitializeComponent();
DataContextChanged += OnDataContextChanged;
}
private void OnDataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
{
if (_vm != null)
_vm.InspectColumnsChanged -= RebuildInspectColumns;
_vm = DataContext as RubberQuickTestOperationViewModel;
if (_vm != null)
public RubberQuickTestOperationView()
{
_vm.InspectColumnsChanged += RebuildInspectColumns;
RebuildInspectColumns();
}
}
private void RebuildInspectColumns()
{
if (_vm == null) return;
InspectResultGrid.Columns.Clear();
InspectResultGrid.Columns.Add(new DataGridTextColumn
{
Header = "编号",
Binding = new System.Windows.Data.Binding("RowNo"),
IsReadOnly = true,
Width = 80
});
for (int i = 0; i < _vm.DataPointColumns.Count; i++)
{
var col = _vm.DataPointColumns[i];
var binding = new System.Windows.Data.Binding($"Cells[{i}].Value")
{
UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged,
Mode = System.Windows.Data.BindingMode.TwoWay
};
InspectResultGrid.Columns.Add(new DataGridTextColumn
{
Header = col.PointName ?? $"点{i + 1}",
Binding = binding,
Width = 90,
IsReadOnly = false
});
InitializeComponent();
Loaded += OnLoaded;
DataContextChanged += OnDataContextChanged;
Unloaded += (_, _) => DetachViewModel();
}
InspectResultGrid.Columns.Add(new DataGridTextColumn
private void OnLoaded(object sender, RoutedEventArgs e)
{
Header = "实验结果",
Binding = new System.Windows.Data.Binding("InspectResultText"),
IsReadOnly = true,
Width = 90
});
}
// 兜底AutoWireViewModel 可能在构造函数订阅 DataContextChanged 之前就设置了 DataContext
AttachViewModel(DataContext as RubberQuickTestOperationViewModel);
}
private void InspectResultGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (_vm == null) return;
_vm.SelectedInspectRow = InspectResultGrid.SelectedItem as QuickTestInspectRowViewModel;
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
DetachViewModel();
AttachViewModel(DataContext as RubberQuickTestOperationViewModel);
}
private void AttachViewModel(RubberQuickTestOperationViewModel? vm)
{
if (vm == null || ReferenceEquals(_vm, vm)) return;
_vm = vm;
_vm.InspectColumnsChanged += RebuildInspectColumns;
_vm.DataPointColumns.CollectionChanged += OnDataPointColumnsChanged;
RebuildInspectColumns();
}
private void DetachViewModel()
{
if (_vm == null) return;
_vm.InspectColumnsChanged -= RebuildInspectColumns;
_vm.DataPointColumns.CollectionChanged -= OnDataPointColumnsChanged;
_vm = null;
}
private void OnDataPointColumnsChanged(object? sender, NotifyCollectionChangedEventArgs e)
=> RebuildInspectColumns();
private void RebuildInspectColumns()
{
if (!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(RebuildInspectColumns);
return;
}
var vm = _vm ?? DataContext as RubberQuickTestOperationViewModel;
if (vm == null) return;
InspectResultGrid.Columns.Clear();
InspectResultGrid.Columns.Add(new DataGridTextColumn
{
Header = "编号",
Binding = new Binding(nameof(QuickTestInspectRowViewModel.RowNo))
{
Mode = BindingMode.OneWay
},
IsReadOnly = true,
Width = 80
});
for (int i = 0; i < vm.DataPointColumns.Count; i++)
{
var col = vm.DataPointColumns[i];
var columnIndex = i;
var header = string.IsNullOrWhiteSpace(col.PointName)
? $"数据点{columnIndex + 1}"
: col.PointName;
InspectResultGrid.Columns.Add(new DataGridTextColumn
{
Header = header,
Binding = new Binding($"Cells[{columnIndex}].Value")
{
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
Mode = BindingMode.TwoWay,
TargetNullValue = string.Empty
},
Width = 100,
IsReadOnly = false
});
}
InspectResultGrid.Columns.Add(new DataGridTextColumn
{
Header = "实验结果",
Binding = new Binding(nameof(QuickTestInspectRowViewModel.InspectResultText))
{
Mode = BindingMode.OneWay
},
IsReadOnly = true,
Width = 90
});
}
private void InspectResultGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var vm = _vm ?? DataContext as RubberQuickTestOperationViewModel;
if (vm == null) return;
vm.SelectedInspectRow = InspectResultGrid.SelectedItem as QuickTestInspectRowViewModel;
}
}