using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Autodesk.Revit.DB; using CommunityToolkit.Mvvm.ComponentModel; namespace Szmedi.RevitToolkit.Approval.Models { public partial class ReviewItem : ObservableObject { private readonly string SignParamName; //[ObservableProperty] //public partial bool IsSelected { get; set; } = false; [ObservableProperty] [NotifyPropertyChangedFor(nameof(FullName))] public partial string Sign { get; set; } [ObservableProperty] [NotifyPropertyChangedFor(nameof(FullName))] public partial string Code { get; private set; } public ReviewItem(Element element, string signParam = "深圳构件标识") { Element = element; this.SignParamName = signParam; Sign = GetParameterValue(element, signParam, "无标识"); Code = GetParameterValue(element, "AM-100-EAM分类编码", "无编码"); //Sign = element.GetParameters("深圳构件标识").FirstOrDefault()?.AsString() ?? "无标识"; //Code = element.GetParameters("AM-100-EAM分类编码").FirstOrDefault()?.AsString() ?? "无编码"; } private string GetParameterValue(Element element, string paramName, string defaultValue) { var doc = element.Document; var param = element.GetParameters(paramName)?.FirstOrDefault(); var typeParam = doc.GetElement(element.GetTypeId())?.GetParameters(paramName)?.FirstOrDefault(); string paramValue = typeParam?.AsString() ?? defaultValue; if (paramValue == defaultValue) { paramValue = param?.AsString() ?? defaultValue; } return paramValue; } private void SetParameterValue(Element element, string paramName, string value) { var doc = element.Document; var typeParam = doc.GetElement(element.GetTypeId()).GetParameters("深圳构件标识").FirstOrDefault(); var param = element.GetParameters(paramName).FirstOrDefault(); var typeResult = typeParam?.SetValue(value); var instanceResult = param?.SetValue(value); if (typeResult != true && instanceResult != true) { MessageBox.Show($"修改失败,请确认是否存在参数:{paramName}"); } } partial void OnSignChanged(string value) { if (value == "无标识") { return; } RvApp.Handler .Raise( uiapp => { if (!Element.IsValidObject) { return; } Element.Document .Invoke( _ => { SetParameterValue(Element, "深圳构件标识", value); //var param = Element.GetParameters("深圳构件标识").FirstOrDefault(); //if (param.AsString() == value) //{ // return; //} //param.SetValue(value); }, $"修改标识->{value}"); }); } public string FullName { get { //if (string.IsNullOrEmpty(Sign)) //{ // Sign = "无标识"; //} //if (string.IsNullOrEmpty(Code)) //{ // Code = "无编号"; //} return $"{Sign} - {Code}"; } } public Element Element { get; } } }