Files
Shrlalgo.RvKits/ShrlAlgo.RvKits/RvView/SystemDisplayViewModel.cs

75 lines
2.2 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using ShrlAlgo.RvKits.RvMEP;
using ShrlAlgo.RvKits.Windows;
2024-09-22 11:05:41 +08:00
namespace ShrlAlgo.RvKits.RvView;
2024-09-22 11:05:41 +08:00
public partial class SystemDisplayViewModel : ObservableRecipient, IRecipient<Color>
{
private SystemModel currentModel;
[ObservableProperty]
private List<SystemModel> systemsCollection;
public SystemDisplayViewModel(UIApplication uiapp)
{
var doc = uiapp.ActiveUIDocument.Document;
var enumerable = doc.OfClass<MEPSystemType>().Cast<MEPSystemType>();
var systemModels = from mepSystemType in enumerable let model = new SystemModel(mepSystemType) select model;
SystemsCollection = new List<SystemModel>(systemModels);
IsActive = true;
//订阅
//WeakReferenceMessenger.Default.RegisterAll(this);
//WeakReferenceMessenger.Default.Register<SelectedColor>(this);
//WeakReferenceMessenger.Default.Register<SelectedColor>(this, (r, m) =>
//{
// TaskDialog.Show("消息", "收到消息");
//});
//Messenger.Register<SystemDisplayViewModel, ColorPickerViewModel>(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<SelectedColor>(this, (r, m) =>
//{
// color = m;
//});
}
}
}