using System.ComponentModel; using Avalonia.Controls; using Avalonia.Interactivity; using ZB.MOM.WW.LmxOpcUa.Client.UI.ViewModels; namespace ZB.MOM.WW.LmxOpcUa.Client.UI.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } protected override void OnLoaded(RoutedEventArgs e) { base.OnLoaded(e); var browseTreeView = this.FindControl("BrowseTreePanel"); var treeView = browseTreeView?.FindControl("BrowseTree"); if (treeView != null) treeView.SelectionChanged += OnTreeSelectionChanged; // Wire up context menu opening to sync selection and check history var contextMenu = this.FindControl("TreeContextMenu"); if (contextMenu != null) contextMenu.Opening += OnTreeContextMenuOpening; } private void OnTreeSelectionChanged(object? sender, SelectionChangedEventArgs e) { if (DataContext is not MainWindowViewModel vm || sender is not TreeView treeView) return; // Update single selection for read/write and history panels vm.SelectedTreeNode = treeView.SelectedItem as TreeNodeViewModel; // Sync multi-selection collection vm.SelectedTreeNodes.Clear(); foreach (var item in treeView.SelectedItems) if (item is TreeNodeViewModel node) vm.SelectedTreeNodes.Add(node); } private void OnTreeContextMenuOpening(object? sender, CancelEventArgs e) { if (DataContext is MainWindowViewModel vm) vm.UpdateHistoryEnabledForSelection(); } }