using System.ComponentModel; using System.Windows; using Autodesk.Revit.DB; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; namespace Sai.RvKits.RvView; public partial class ViewManagerModel : ObservableObject { [ObservableProperty] private UserViewDetailLevel? detailLevel; [ObservableProperty] private UserViewDiscipline? discipline; [ObservableProperty] private UserDisplayStyle displayStyle; [ObservableProperty] private string name; [ObservableProperty] private int scale; [ObservableProperty] private string sheetName; [ObservableProperty] private string sheetNumber; [ObservableProperty] private UserViewType userViewType; public View View { get; set; } [ObservableProperty] private View viewTemplate; public List ViewTemplates { get; private set; } public ViewManagerModel(View view) { Name = view.Name; View = view; UserViewType = (UserViewType)view.ViewType; Discipline = view.HasViewDiscipline() ? (UserViewDiscipline)view.Discipline : null; DetailLevel = (UserViewDetailLevel)view.DetailLevel; DisplayStyle = (UserDisplayStyle)view.DisplayStyle; Scale = view.Scale; ViewTemplates = view.Document .OfClass() .Cast() .Where(v => v.IsTemplate && View.IsValidViewTemplate(v.Id)) .ToList(); //ViewTemplate = view.Document.GetElement(view.ViewTemplateId) as View; ViewTemplate = ViewTemplates.FirstOrDefault(template => View.ViewTemplateId == template.Id); //保证选中项在集合中,使得combobox默认选中 //ViewTemplate = view.Document.OfCollector().Cast().FirstOrDefault(v => v.IsTemplate && v.Id == view.ViewTemplateId); //ViewTemplate = view.Document.GetElement(view.ViewTemplateId) as View; SheetName = view.get_Parameter(BuiltInParameter.VIEW_DESCRIPTION).AsString(); SheetNumber = view is ViewSheet sheet ? sheet.SheetNumber : null; } //protected override void OnPropertyChanged(PropertyChangedEventArgs e) //{ // base.OnPropertyChanged(e); // if ( // e.PropertyName == nameof(DetailLevel) // || e.PropertyName == nameof(Discipline) // || e.PropertyName == nameof(DisplayStyle) // || e.PropertyName == nameof(Scale) // || e.PropertyName == nameof(SheetName) // || e.PropertyName == nameof(ViewTemplate) // ) // { // Messenger.Send(new ViewMessage(this, e.PropertyName)); // } //} public bool IsDetailLevelEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet; public bool IsDisciplineEditable => Discipline != null; public bool IsDisplayStyleEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet; public bool IsScaleEditable => Scale != 0 && (View is not View3D view3D || !view3D.IsPerspective) && UserViewType != UserViewType.DrawingSheet && UserViewType != UserViewType.Schedule && UserViewType != UserViewType.Rendering; public bool IsSheetNameEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet; public bool IsSheetNumberEditable => SheetNumber != null; public bool IsViewTemplateEditable => UserViewType != UserViewType.DrawingSheet; }