using Microsoft.Extensions.DependencyInjection; using PMSWPF.Enums; using PMSWPF.Models; using PMSWPF.ViewModels; namespace PMSWPF.Helper; public class DataServicesHelper { /// /// 从设备列表中找到变量表VarTable对象 /// /// VarTable的ID /// 如果找到择返回对象,否则返回null public static VariableTable FindVarTableForDevice(List devices, int vtableId) { VariableTable varTable = null; foreach (var device in devices) { varTable = device.VariableTables.FirstOrDefault(v => v.Id == vtableId); if (varTable != null) return varTable; } return varTable; } public static MenuBean FindMenusForDevice(Device device, IEnumerable menus) { if (menus == null) { return null; } foreach (var menu in menus) { // 检查当前菜单项是否匹配 if (menu.Type==MenuType.DeviceMenu && menu.DataId ==device.Id) { return menu; } // 递归搜索子菜单 var foundInSubMenu = FindMenusForDevice(device, menu.Items); if (foundInSubMenu != null) { return foundInSubMenu; } } return null; } /// /// 给菜单排序 /// /// public static void SortMenus(MenuBean menu) { if (menu.Items == null || menu.Items.Count() == 0) return; menu.Items.Sort((a, b) => a.Type.ToString().Length.CompareTo(b.Type.ToString().Length) ); foreach (var menuItem in menu.Items) { SortMenus(menuItem); } } public static ViewModelBase GetMainViewModel(string name) { ViewModelBase navgateVM = App.Current.Services.GetRequiredService(); switch (name) { case "主页": navgateVM = App.Current.Services.GetRequiredService(); break; case "设备": navgateVM = App.Current.Services.GetRequiredService(); break; case "Mqtt服务器": navgateVM = App.Current.Services.GetRequiredService(); break; case "数据转换": navgateVM = App.Current.Services.GetRequiredService(); break; case "设置": navgateVM = App.Current.Services.GetRequiredService(); break; } return navgateVM; } public static MenuBean FindVarTableMenu(int varTableId, List menus) { if (menus == null) { return null; } foreach (var menu in menus) { // 检查当前菜单项是否匹配 if (menu.Type==MenuType.VariableTableMenu && menu.DataId ==varTableId) { return menu; } // 递归搜索子菜单 var foundInSubMenu = FindVarTableMenu(varTableId, menu.Items); if (foundInSubMenu != null) { return foundInSubMenu; } } return null; } }