设备编辑管理界面
This commit is contained in:
@@ -5,6 +5,7 @@ using Logger;
|
||||
using MaterialDesignThemes.Wpf;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Reflection;
|
||||
using System.Windows.Input;
|
||||
using System.Xml;
|
||||
using UIShare.ViewModelBase;
|
||||
@@ -68,6 +69,7 @@ namespace TestingModule.ViewModels
|
||||
private readonly SystemConfig _systemConfig;
|
||||
private readonly GlobalInfo _globalInfo;
|
||||
private readonly DeviceManager _deviceManager;
|
||||
private readonly IContainerProvider _containerProvider;
|
||||
#region 命令
|
||||
public ICommand ParameterAddCommand { get; set; }
|
||||
public ICommand ParameterEditCommand { get; set; }
|
||||
@@ -85,6 +87,7 @@ namespace TestingModule.ViewModels
|
||||
_systemConfig = containerProvider.Resolve<SystemConfig>();
|
||||
_deviceManager = containerProvider.Resolve<DeviceManager>();
|
||||
_globalInfo = containerProvider.Resolve<GlobalInfo>();
|
||||
_containerProvider = containerProvider;
|
||||
Program = _ScopedContext.Program;
|
||||
ParameterAddCommand = new DelegateCommand(ParameterAdd);
|
||||
ParameterEditCommand = new DelegateCommand(ParameterEdit);
|
||||
@@ -105,15 +108,63 @@ namespace TestingModule.ViewModels
|
||||
{
|
||||
await _deviceManager.CloseDeviceAsync(SelectedDevice.DeviceName);
|
||||
}
|
||||
/// <summary>
|
||||
/// 跟踪已打开的弹窗管理器窗口实例,避免重复打开多个 DialogMangerView 窗口。
|
||||
/// </summary>
|
||||
private static System.Windows.Window? _dialogWindow;
|
||||
|
||||
private void DeviceEdit()
|
||||
{
|
||||
if (!_globalInfo.IsAdmin) return;
|
||||
if (SelectedDevice==null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (SelectedDevice == null) return;
|
||||
var type = SelectedDevice.DeviceType.Split('.').Last();
|
||||
_dialogService.Show(type);
|
||||
var viewName = type + "View";
|
||||
|
||||
try
|
||||
{
|
||||
// 1. 先确保弹窗管理器窗口已打开(首次 Show,后续只追加 Tab)
|
||||
if (_dialogWindow == null || !_dialogWindow.IsVisible)
|
||||
{
|
||||
_dialogService.Show("DialogMangerView");
|
||||
|
||||
// 找到刚刚被 DialogService 打开的窗口(按 DataContext 类型名匹配)
|
||||
_dialogWindow = System.Windows.Application.Current.Windows
|
||||
.OfType<System.Windows.Window>()
|
||||
.FirstOrDefault(w => w.DataContext?.GetType().Name == "DialogMangerViewModel");
|
||||
}
|
||||
|
||||
// 2. 从容器按注册名解析设备编辑 View
|
||||
var view = _containerProvider.Resolve<object>(viewName) as System.Windows.FrameworkElement;
|
||||
if (view == null) return;
|
||||
|
||||
// 3. 通过反射调用 ViewModel 上的 Initialize(deviceName) 方法,
|
||||
// 避免 TestingModule 直接引用 DeviceEditModule 的类型
|
||||
var vm = view.DataContext;
|
||||
if (vm != null)
|
||||
{
|
||||
var initMethod = vm.GetType().GetMethod("Initialize", new[] { typeof(string) });
|
||||
initMethod?.Invoke(vm, new object[] { SelectedDevice.DeviceName });
|
||||
}
|
||||
|
||||
// 4. 发布事件 → DialogMangerViewModel 接收后将此 View 添加为 Tab
|
||||
_eventAggregator.GetEvent<AddDialogTabEvent>().Publish(new DialogTabInfo
|
||||
{
|
||||
Title = $"{type} [{SelectedDevice.DeviceName}]",
|
||||
Content = view
|
||||
});
|
||||
|
||||
// 5. 将窗口置顶(确保用户看到新增的 Tab)
|
||||
if (_dialogWindow != null && _dialogWindow.IsVisible)
|
||||
{
|
||||
if (_dialogWindow.WindowState == System.Windows.WindowState.Minimized)
|
||||
_dialogWindow.WindowState = System.Windows.WindowState.Normal;
|
||||
_dialogWindow.Activate();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerHelper.ErrorWithNotify($"打开设备编辑窗口 [{type}] 失败:{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void ParameterDelete()
|
||||
|
||||
Reference in New Issue
Block a user