桌面端密炼计划、胶料快检调整
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user