using System.Linq; using Autodesk.Revit.UI; using Nice3point.Revit.Toolkit.External.Handlers; using Szmedi.RvKits.Assists; using Szmedi.RvKits.InfoManager.Delivery; using Szmedi.RvKits.Models; namespace Szmedi.RvKits.InfoManager { public partial class MetroProjectParamManagerViewModel : ObservableObject { private readonly DapperUtil dapperUtil; private readonly ActionEventHandler handler; private readonly UIApplication uiapp; [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(AddParametersCommand))] private bool canAdd; public readonly List paramsToAdd = new List(); //private RelayCommand addParameters; //private RelayCommand checkAll; //private RelayCommand unCheckAll; //public ICommand CheckAll //{ // get // { // checkAll ??= new RelayCommand(PerformCheckedAll); // return checkAll; // } //} //public ICommand UnCheckAll //{ // get // { // unCheckAll ??= new RelayCommand(PerformUnCheckedAll); // return unCheckAll; // } //} //public ICommand AddParameters //{ // get // { // if (addParameters == null) // { // var uidoc = ParentWindow.UiApplication.ActiveUIDocument; // var doc = uidoc.doc; // addParameters = new RelayCommand(PerformAddParameters, p => !doc.IsFamilyDocument); // } // return addParameters; // } //} public List MetroSharedParams { get; set; } public List Models { get; } = new List(); //public ParamManagerWin ParentWindow { get; set; } //public MetroProjectParamManagerViewModel(ParamManagerWin parentWindow) //{ // ParentWindow = parentWindow; // dapperUtil = parentWindow.DapperUtil; // var projectParams = GetMetroProjectProperties(); // MetroSharedParams = GetMetroSharedParams(); // GenerateMetroProjectPropTree(projectParams); // CanAdd = paramsToAdd.Any() && !ParentWindow.UiApplication.ActiveUIDocument.Document.IsFamilyDocument; //} public MetroProjectParamManagerViewModel(UIApplication uiapp, DapperUtil dapperUtil, ActionEventHandler handler) { this.dapperUtil = dapperUtil; this.handler = handler; this.uiapp = uiapp; var projectParams = GetMetroProjectProperties(); MetroSharedParams = GetMetroSharedParams(); GenerateMetroProjectPropTree(projectParams); CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument; } /// /// 轨交项目属性 /// private List GetMetroProjectProperties() { return dapperUtil.LoadModel("metro_project_properties"); } /// /// 轨交共享参数 /// private List GetMetroSharedParams() { return dapperUtil.LoadModel("metro_shared_params"); } /// /// 生成属性树 /// /// private void GenerateMetroProjectPropTree(IList paramsData) { var projects = paramsData.GroupBy(param => param.Project); foreach (var project in projects) { //项目 List projectChildren = new(); TreeModel projectTreeModel = new() { Name = project.Key, Icon = null, IsChecked = false, IsExpanded = true, Parent = null, Children = projectChildren, Tag = null }; Models.Add(projectTreeModel); //专业 var majors = project.GroupBy(p => p.Major); foreach (var major in majors) { List majorChildren = new(); TreeModel majorTreeModel = new() { Name = major.Key, Icon = null, IsChecked = false, IsExpanded = false, Children = majorChildren, Tag = major.ToList() }; projectChildren.Add(majorTreeModel); } } } [RelayCommand(CanExecute = nameof(CanAdd))] private void AddParameters() { CommandAssists.ExitCurrentCommand(); //if (li.Any()) //{ // foreach (var param in li) // { // if (param.IsChecked == true) // { // paramsToAdd.Add(param); // } // } //} handler.Raise( uiapp => { var filePath = Path.Combine(GlobalVariables.DirAssembly, $"TempSharedParameters.txt"); var doc = uiapp.ActiveUIDocument.Document; ParameterHelpers.AddProjectParameters(doc, paramsToAdd, MetroSharedParams, filePath); }); //ParentWindow.AddParameterEventHandler.IsOnlyProjectCategory = true; //ParentWindow.AddParameterEventHandler.ParametersToAdded = paramsToAdd; //ParentWindow.AddParameterEventHandler.SharedParameters = MetroSharedParams; //ParentWindow.AddParameterEvent.Raise(); } [RelayCommand] private void TreeItemChanged(object obj) { if (obj is List paramters) { paramsToAdd.Clear(); if (paramters.Any()) { paramsToAdd.AddRange(paramters.Where(param => param.IsChecked == true)); } } CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument; } //private void PerformCheckedAll(object obj) //{ // if (obj is List) // { // var paramters = obj as List; // foreach (var param in paramters) // { // param.IsChecked = true; // } // } //} //private void PerformUnCheckedAll(object obj) //{ // if (obj is List) // { // var paramters = obj as List; // foreach (var param in paramters) // { // param.IsChecked = false; // } // } //} } }