Ответы пользователя по тегу XAML
  • Avalonia. Возможно ли маршрутизированное событие для класса в шаблонном типе?

    @AAGR
    Занимаюсь программированиям
    Определите интерфейс, который содержит событие маршрутизации, и имплементировать этот интерфейс в каждом классе, где необходимо использовать это событие. Затем в каждом классе можно определить статический член, который будет хранить все подписки на событие в этом классе. Каждый раз, когда событие происходит, класс будет обновлять свои подписки и оповещать всех заинтересованных слушателей.

    public interface IBase
    {
        event EventHandler<RoutedEventArgs> MyRoutedEvent;
    }
    
    public class Base<T> : ReactiveUserControl<T>, IBase where T : class
    {
        public static event EventHandler<RoutedEventArgs> MyRoutedEvent;
    
        event EventHandler<RoutedEventArgs> IBase.MyRoutedEvent
        {
            add { MyRoutedEvent += value; }
            remove { MyRoutedEvent -= value; }
        }
    
        protected static void OnMyRoutedEvent(object sender, RoutedEventArgs e)
        {
            MyRoutedEvent?.Invoke(sender, e);
        }
    }


    Concrete:

    public class Concrete : Base<ConcreteViewModel>, IBase
    {
        public static event EventHandler<RoutedEventArgs> MyRoutedEvent;
    
        event EventHandler<RoutedEventArgs> IBase.MyRoutedEvent
        {
            add { MyRoutedEvent += value; }
            remove { MyRoutedEvent -= value; }
        }
    
        protected override void OnInitialized()
        {
            base.OnInitialized();
            MyRoutedEvent += OnMyRoutedEvent;
        }
    
        protected override void OnDispose()
        {
            MyRoutedEvent -= OnMyRoutedEvent;
            base.OnDispose();
        }
    }
    Ответ написан
    Комментировать