using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework; using ArcGIS.Desktop.Framework.Contracts; using ArcGIS.Desktop.Framework.Dialogs; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.KnowledgeGraph; using ArcGIS.Desktop.Layouts; using ArcGIS.Desktop.Mapping; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Console; using System.Collections.ObjectModel; using LinkToolAddin.message; namespace LinkToolAddin.ui.dockpane { internal class DialogDockpaneViewModel : DockPane { private const string _dockPaneID = "DialogDockpane"; private ObservableCollection _message = new ObservableCollection(); //ObservableCollection 是 .NET 提供的一个特殊集合类,它会在集合发生变化时自动通知 UI 更新,它实现了 INotifyCollectionChanged 接口,UI 绑定后可以自动刷新。 public ObservableCollection Messages => _message; //定义了一个只读属性 Messages,返回内部的 _messages 集合。 //该属性将被绑定到 UI 的 ItemsControl.ItemsSource 上,这样 UI 就能实时显示新消息。 protected DialogDockpaneViewModel() { } /// /// Show the DockPane. /// internal static void Show()//显示面板 { DockPane pane = FrameworkApplication.DockPaneManager.Find(_dockPaneID); if (pane == null) return; pane.Activate(); } /// /// Text shown near the top of the DockPane. /// private string _heading = "My DockPane";//标题栏文字 public string Heading { get => _heading;//绑定到 UI 上的标题文字,默认是 "My DockPane"。 set => SetProperty(ref _heading, value);//属性变更通知方法,用于支持数据绑定 } } /// /// Button implementation to show the DockPane. /// internal class DialogDockpane_ShowButton : Button//用于打开面板 { protected override void OnClick() { DialogDockpaneViewModel.Show(); } } }