using Autodesk.Revit.DB; using Autodesk.Revit.UI; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using ShrlAlgoToolkit.RevitAddins.RvMEP; using ShrlAlgoToolkit.RevitAddins.Windows; namespace ShrlAlgoToolkit.RevitAddins.RvView; public partial class SystemDisplayViewModel : ObservableRecipient, IRecipient { private SystemModel currentModel; [ObservableProperty] public partial List SystemsCollection { get; set; } public SystemDisplayViewModel(UIApplication uiapp) { var doc = uiapp.ActiveUIDocument.Document; var enumerable = doc.OfClass().Cast(); var systemModels = from mepSystemType in enumerable let model = new SystemModel(mepSystemType) select model; SystemsCollection = new List(systemModels); IsActive = true; //订阅 //WeakReferenceMessenger.Default.RegisterAll(this); //WeakReferenceMessenger.Default.Register(this); //WeakReferenceMessenger.Default.Register(this, (r, m) => //{ // TaskDialog.Show("消息", "收到消息"); //}); //Messenger.Register(this, (r, m) => //{ //}); } public void Receive(Color message) { //TaskDialog.Show("消息", "收到颜色消息"); if (message != null) { currentModel.FillColor = message; currentModel.BackgroundColor = new System.Windows.Media.SolidColorBrush( System.Windows.Media.Color.FromRgb(message.Red, message.Green, message.Blue) ); } //currentModel.BackgroundColor = System.Windows.Media.SelectedColor.FromRgb(message.Red, message.Green, message.Blue); } [RelayCommand] private void OpenColorPicker(object obj) { if (obj is SystemModel model) { currentModel = model; var viewModel = model.FillColor.IsValid ? new ColorPickerViewModel( System.Windows.Media.Color.FromRgb(model.FillColor.Red, model.FillColor.Green, model.FillColor.Blue) ) : new ColorPickerViewModel(System.Windows.Media.Color.FromRgb(0, 0, 0)); var win = new ColorPickerWin(viewModel); win.ShowDialog(); //WeakReferenceMessenger.Default.Register(this, (r, m) => //{ // color = m; //}); } } }