0

Я создаю столбец связанных элементов управления DatePicker в элементе управления DataGrid. Для каждого элемента управления DatePicker я хотел бы добавить обработчик SelectedDateChangedEvent, но мне трудно это сделать.Каков правильный тип обработчика DatePicker SelectedDateChangedEvent для FrameworkElementFactory

Рассмотрим следующий код для WPF:

private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    if (e.PropertyName == "Event Date") 
    { 
     var f = new FrameworkElementFactory(typeof(DatePicker)); 

     ... 

     // I tried this: 
     //f.AddHandler(DatePicker.SelectedDateChangedEvent, new RoutedEventHandler(aRoutedEventHandler)); 
     // and I tried this: 
     //f.AddHandler(DatePicker.SelectedDateChangedEvent, new SelectionChangedEventHandler(aSelectionChangedEventHandler)); 

     e.Column = new DataGridTemplateColumn() 
     { 
      Header = e.Column.Header, 
      CellTemplate = new DataTemplate() { VisualTree = f }, 
     }; 
    } 
} 

private void aRoutedEventHandler(object sender, RoutedEventArgs e) { ... } 

private void aSelectionChangedEventHandler(object sender, SelectionChangedEventArgs e) {...} 

Пытаюсь либо из обработчиков событий приводит к "Аргумент Exception":

Первый шанс исключение типа 'System.ArgumentException' произошло в PresentationFramework.dll Дополнительная информация: Тип обработчика недействителен.

Каков правильный обработчик?

+0

ли объекты в ваша поддержка коллекции INotifyPropertyChanged? Если это так, вы можете попробовать подключиться к этому, а не подключаться к основным событиям управления. – KornMuffin

+0

Я отложил то, что я намеревался сделать в обработчике событий, до момента проверки. Я все еще собираюсь оставить этот вопрос без ответа, хотя я считаю, что это ошибка. (Я сделал то, что показано в коде выше с помощью элемента управления ComboBox, и ошибка не возникла). – Bhoboco

ответ

0

Вам нужно добавить обработчик следующим образом для DatePicker SelectedDateChangedEvent типа

f.AddHandler(DatePicker.SelectedDateChangedEvent, new EventHandler<SelectionChangedEventArgs>(aSelectionChangedEventHandler)); 

обработчике можно найти, посмотрев в класс DatePicker на публичных мероприятиях объявляются

public event RoutedEventHandler CalendarOpened; 
public event RoutedEventHandler CalendarOpened; 
public event EventHandler<DatePickerDateValidationErrorEventArgs> 
public event EventHandler<SelectionChangedEventArgs> SelectedDateChanged; 
Смежные вопросы