using System.Collections.ObjectModel; namespace SHH.CameraDashboard { /// /// 应用程序全局状态和事件总线。 /// 此类作为一个静态的中央枢纽,用于在应用程序的不同部分之间共享数据和通信。 /// public static class AppGlobal { #region --- 全局数据存储 --- /// /// 获取一个可观察的集合,用于存储和显示所有已配置的服务节点。 /// 由于使用了 ,当集合内容发生变化时,UI(如 ListView)会自动更新。 /// public static ObservableCollection ServiceNodes { get; } = new ObservableCollection(); /// /// 获取或设置当前正在使用的服务节点。 /// 当用户从列表中选择一个节点时,应更新此属性。 /// public static ServiceNodeModel? UseServiceNode { get; set; } #endregion #region --- 全局事件总线 --- #region CameraAdd /// /// 当应用程序的任何部分请求添加一个新摄像头时发生。 /// public static event Action? OnRequestAddCamera; /// /// 触发 事件,以请求打开摄像头添加界面。 /// public static void RequestAdd() => OnRequestAddCamera?.Invoke(); #endregion #region CameraEdit /// /// 当应用程序的任何部分请求编辑一个摄像头时发生。 /// 事件处理程序将接收到要编辑的 实例。 /// public static event Action? OnRequestEditCamera; /// /// 触发 事件,以请求打开摄像头编辑界面。 /// /// 要编辑的摄像头数据模型。 public static void RequestEdit(WebApiCameraModel camera) => OnRequestEditCamera?.Invoke(camera); #endregion #region CameraDelete /// /// 当应用程序的任何部分请求删除一个摄像头时发生。 /// 事件处理程序将接收到要删除的 实例。 /// public static event Action? OnRequestDeleteCamera; /// /// 触发 事件,以请求删除指定的摄像头。 /// /// 要删除的摄像头数据模型。 public static void RequestDelete(WebApiCameraModel camera) => OnRequestDeleteCamera?.Invoke(camera); #endregion #region CameraRefreshList /// /// 当应用程序的任何部分请求刷新摄像头列表时发生。 /// public static event Action? OnRefreshListRequest; /// /// 触发 事件,以请求刷新摄像头列表数据。 /// public static void RequestRefresh() => OnRefreshListRequest?.Invoke(); #endregion // [新增] 请求云台控制事件 public static event Action? OnRequestPtzCamera; // [新增] 触发方法 public static void RequestPtz(WebApiCameraModel camera) => OnRequestPtzCamera?.Invoke(camera); // 图像处理 public static event Action? OnRequestImgProc; public static void RequestImgProc(WebApiCameraModel camera) => OnRequestImgProc?.Invoke(camera); // 1. 定义事件委托:当 ViewModel 请求订阅时触发 public static event Action? OnRequestSubscription; // 2. 定义触发方法:供 CameraItemTopViewModel 调用 public static void RequestSubscription(WebApiCameraModel camera) => OnRequestSubscription?.Invoke(camera); #endregion } }