using System; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Notes.Models; using Notes.ViewModels; namespace Notes.Views; public class NoteView : TemplatedControl { //TemplatedControl必须在这监听,比较晚创建,但是实例化是一开始执行的,会找不到子元素 protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); var listBox = e.NameScope.Find("listNotes"); if (listBox == null) throw new NullReferenceException(nameof(listBox)); listBox.AddHandler(SelectingItemsControl.SelectionChangedEvent, this.Handler); } private void Handler(object? sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count>0) { var eAddedItem = e.AddedItems[0]; if (eAddedItem is Note note) { if (DataContext is NoteViewModel noteViewModel) { noteViewModel.SelectedNote = note; } } } } }