using HStation.RevitDev.Model.ModelEnum; using HStation.RevitDev.RevitDataExport.Entity; using HStation.RevitDev.RevitDataExport.Entity.ElementModels; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Windows.Controls; namespace HStation.RevitDev.RevitDataExport.Utility { public class WpfBindingUtils { public static Dictionary InitCache { get; set; } = new Dictionary(); public static void Binding(DataGrid dataGrid, RevitType revitType, ObservableCollection models) { if (!InitCache.ContainsKey(revitType)) { InitCache.Add(revitType, false); } if (!InitCache[revitType]) { InitDataGridColumns(dataGrid, revitType); InitCache[revitType] = true; } } public static void Binding2(DataGrid dataGrid, RevitType revitType, List models) { switch (revitType) { case RevitType.RFT_Pump: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Blocker: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Converter: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Elbow: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_FourJoint: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_HeatExchanger: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Pipe: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Shower: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_ThreeJoint: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Valve: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_WaterBox: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_WaterMeter: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_WaterPool: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_FireHydrant: { var subModels = ModelFactory.Convert2Sub(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } case RevitType.RFT_Unknown: case RevitType.RFT_Others: default: { var subModels = ModelFactory.Convert2Others(models); dataGrid.ItemsSource = subModels; //HeaderConvertChs(dataGrid); break; } } } private static void HeaderConvertChs(DataGrid dataGrid) where T : ElementModel { Type type = typeof(T); var properties = type.GetProperties(); foreach (var prop in properties) { var descAttr = prop.GetCustomAttribute(); if (descAttr == null) { continue; } var propName = prop.Name; var chsName = descAttr.Description; var column = dataGrid.Columns.Where(x => x.Header.ToString() == propName)?.FirstOrDefault(); if (column == null) { continue; } column.Header = chsName; } } private static void InitDataGridColumns(DataGrid dataGrid, RevitType revitType) { Type type = RevitTypeExtense.GetElementModelType(revitType); PropertyInfo[] props = type.GetProperties(); foreach (PropertyInfo prop in props) { var propName = prop.Name; var chsName = prop.GetCustomAttribute()?.Description; if (string.IsNullOrEmpty(chsName)) { continue; } var column = new DataGridTextColumn(); column.Header = chsName; dataGrid.Columns.Add(column); } } } }