Маршрутизируемые события в WPF - с использованием делегата Action
Я разрабатываю пользовательский элемент управления и хочу использовать перенаправленное событие. Я заметил, что есть два делегата - RoutedEventHandler и RoutedPropertyChangedEventHandler. Первый, который не передает никакой информации, а второй, который принимает старые и новые значения свойства, изменяется. Однако мне нужно передать только один фрагмент информации, поэтому я хочу получить эквивалент делегата Action. Есть что-нибудь предусмотрено? Могу ли я использовать делегат Action?
1 ответ
Создайте подкласс RoutedEventArgs для хранения ваших дополнительных данных и используйте EventHandler<T>
с вашим классом args. Это будет преобразовано в RoutedEventHandler, а дополнительные данные будут доступны в ваших обработчиках.
Вы можете создать общий класс RoutedEventArgs, который содержит один параметр любого типа, но создание нового класса обычно облегчает чтение и модификацию кода для включения большего количества параметров в будущем.
public class FooEventArgs
: RoutedEventArgs
{
// Declare additional data to pass here
public string Data { get; set; }
}
public class FooControl
: UserControl
{
public static readonly RoutedEvent FooEvent =
EventManager.RegisterRoutedEvent("Foo", RoutingStrategy.Bubble,
typeof(EventHandler<FooEventArgs>), typeof(FooControl));
public event EventHandler<FooEventArgs> Foo
{
add { AddHandler(FooEvent, value); }
remove { RemoveHandler(FooEvent, value); }
}
protected void OnFoo()
{
base.RaiseEvent(new FooEventArgs()
{
RoutedEvent = FooEvent,
// Supply the data here
Data = "data",
});
}
}