Лучший способ отследить «модифицированный» элемент управления? - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть пользовательский контроль, который может содержать много разных видов элементов управления (например, кнопка, текстовое поле, поле со списком или флажок).Мне нужен общий способ отслеживать, если что-то было изменено.В большинстве случаев мне наплевать на детали (т.е. мне не нужно знать, какое текстовое поле изменилось).Когда я увидел EventManager.RegisterClassEvent, я подумал, что это будет моим решением, но вскоре я понимаю, что это не так.Эта проблема в том, что он слишком много уволен.Например, если у меня есть кнопка и выпадающий список в одном элементе управления, событие button.click также запускается при попадании в выпадающий список выпадающего списка.

В WinForms мне приходилось просматривать все элементы управления в пользовательском контролеи подписаться на соответствующее событие (например, TextBox.TextChanged или ComboBox.SelectedIndexChanged), это утомительно, но работает.Я надеюсь, что есть лучший и более простой способ сделать это в WPF.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Перенаправленные события:

<UserControl x:Class="..." TextBoxBase.TextChanged="UserControl_TextChanged" 
Selector.SelectionChanged="UserControl_SelectionChanged" 
ToggleButton.Checked="UserControl_Checked" 
ButtonBase.Click="UserControl_Click" />
0 голосов
/ 06 декабря 2010

Вы можете поставить эту проверку для проверки e.source в событии UserControl_Click для обработки этого

If(e.Source.GetType()==typeof(Button))
{
  // your code
}
...