qin
2024-09-24 43bd8ee779a4cca7483bdf73c176b9fb8ebed5e2
HStation.RevitDev/RevitDataExport/Utility/WpfBindingUtils.cs
@@ -1,9 +1,11 @@
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;
@@ -11,7 +13,7 @@
{
    public class WpfBindingUtils
    {
        public static Dictionary<RevitType, bool> InitCache { get; set; }  = new Dictionary<RevitType, bool>();
        public static Dictionary<RevitType, bool> InitCache { get; set; } = new Dictionary<RevitType, bool>();
        public static void Binding(DataGrid dataGrid, RevitType revitType, ObservableCollection<ElementModel> models)
        {
            if (!InitCache.ContainsKey(revitType))
@@ -25,6 +27,140 @@
            }
        }
        public static void Binding2(DataGrid dataGrid, RevitType revitType, List<string> models)
        {
            switch (revitType)
            {
                case RevitType.RFT_Pump:
                    {
                        var subModels = ModelFactory.Convert2Sub<PumbModel2>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<PumbModel2>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Blocker:
                    {
                        var subModels = ModelFactory.Convert2Sub<BlockerModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<BlockerModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Converter:
                    {
                        var subModels = ModelFactory.Convert2Sub<ConvertorModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<ConvertorModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Elbow:
                    {
                        var subModels = ModelFactory.Convert2Sub<ElbowModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<ElbowModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_FourJoint:
                    {
                        var subModels = ModelFactory.Convert2Sub<SiTongModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<SiTongModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_HeatExchanger:
                    {
                        var subModels = ModelFactory.Convert2Sub<HeatExchangerModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<HeatExchangerModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Pipe:
                    {
                        var subModels = ModelFactory.Convert2Sub<PipeModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<PipeModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Shower:
                    {
                        var subModels = ModelFactory.Convert2Sub<ShowerModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<ShowerModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_ThreeJoint:
                    {
                        var subModels = ModelFactory.Convert2Sub<SanTongModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<SanTongModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Valve:
                    {
                        var subModels = ModelFactory.Convert2Sub<ValveModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<ValveModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_WaterBox:
                    {
                        var subModels = ModelFactory.Convert2Sub<WaterBoxModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<WaterBoxModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_WaterMeter:
                    {
                        var subModels = ModelFactory.Convert2Sub<WaterMeterModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<WaterMeterModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_WaterPool:
                    {
                        var subModels = ModelFactory.Convert2Sub<WaterPoolModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<WaterPoolModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_FireHydrant:
                    {
                        var subModels = ModelFactory.Convert2Sub<FireHydrantModel>(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<FireHydrantModel>(dataGrid);
                        break;
                    }
                case RevitType.RFT_Unknown:
                case RevitType.RFT_Others:
                default:
                    {
                        var subModels = ModelFactory.Convert2Others(models);
                        dataGrid.ItemsSource = subModels;
                        //HeaderConvertChs<OtherModel>(dataGrid);
                        break;
                    }
            }
        }
        private static void HeaderConvertChs<T>(DataGrid dataGrid) where T : ElementModel
        {
            Type type = typeof(T);
            var properties = type.GetProperties();
            foreach (var prop in properties)
            {
                var descAttr = prop.GetCustomAttribute<DescriptionAttribute>();
                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);