using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; namespace LanMountainDesktop.Mobile.ViewModels; /// /// 组件面板视图模型。 /// 移动端不提供桌面自由摆放,组件以卡片流形式呈现。 /// 后续由组件运行时(DesktopComponents.Runtime)通过 /// 注入真实组件视图。 /// public sealed partial class WidgetPanelViewModel : ObservableObject { public ObservableCollection Widgets { get; } = []; [ObservableProperty] private string _title = "组件面板"; public WidgetPanelViewModel() { // 首版占位卡片:标记组件运行时的接入点。 Widgets.Add(new WidgetCardViewModel("时间表", "课程表 / 日程组件将在此呈现")); Widgets.Add(new WidgetCardViewModel("天气", "天气组件将在此呈现")); Widgets.Add(new WidgetCardViewModel("插件组件", "已安装插件提供的组件将在此呈现")); } /// /// 组件运行时接入点:注册一个真实组件卡片。 /// public void RegisterWidget(WidgetCardViewModel widget) { Widgets.Add(widget); } } /// /// 单个组件卡片。 为空时显示占位说明文本, /// 非空时承载组件运行时提供的真实控件。 /// public sealed partial class WidgetCardViewModel : ObservableObject { [ObservableProperty] private string _name; [ObservableProperty] private string _placeholder; [ObservableProperty] private object? _content; public WidgetCardViewModel(string name, string placeholder, object? content = null) { _name = name; _placeholder = placeholder; _content = content; } }