119 lines
3.7 KiB
C#
119 lines
3.7 KiB
C#
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;
|
||
|
||
public RubberQuickTestOperationView()
|
||
{
|
||
InitializeComponent();
|
||
Loaded += OnLoaded;
|
||
DataContextChanged += OnDataContextChanged;
|
||
Unloaded += (_, _) => DetachViewModel();
|
||
}
|
||
|
||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||
{
|
||
// 兜底:AutoWireViewModel 可能在构造函数订阅 DataContextChanged 之前就设置了 DataContext
|
||
AttachViewModel(DataContext as RubberQuickTestOperationViewModel);
|
||
}
|
||
|
||
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;
|
||
}
|
||
}
|