Элементы управления WPF:Направление события TextChanged ко всем элементам UserControl
-
06-07-2019 - |
Вопрос
Я поместил в контейнер ItemsControl (панель стека шаблонов) свои пользовательские элементы управления, которые динамически добавляются и удаляются во время запуска приложения.Как я могу маршрутизировать событие (например.TextChanged или GotFocus) через все элементы моего UserControl (состоит в основном из текстовых полей)?Здесь мне следует использовать «Делегаты» или ICommand?Я новичок в этом деле и, возможно, я что-то путаю.
Спасибо!
Решение
Я довольно много читаю между строк вашего вопроса, но подозреваю, что вы хотите прикрепить (и отсоединить) обработчики событий к каждому из ваших дочерних элементов управления по мере их добавления (и удаления).
Попробуйте установить для ItemsSource значение ObservableCollection.Затем вы можете прикрепить обработчик событий к событию ObservableCollection.CollectionChanged.В указанном обработчике событий вы можете прикреплять или отсоединять обработчики событий для своих дочерних элементов по мере их добавления и удаления.
public class MyContainer : StackPanel
{
public MyContainer()
{
this.ItemsSource = MyCollection;
}
ObservableCollection<UIElement> myCollection;
public ObservableCollection<UIElement> MyCollection
{
get
{
if (myCollection == null)
{
myCollection = new ObservableCollection<UIElement>();
myCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(myCollection_CollectionChanged);
}
return myCollection;
}
void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
foreach (UIElement removed in e.OldItems)
{
if (added is TextBox)
(added as TextBox).TextChanged -= new Removeyoureventhandler here...
if (added is someotherclass)
(added as someotherclass).someotherevent += Removesomeothereventhandler here...
}
foreach (UIElement added in e.NewItems)
{
if (added is TextBox)
(added as TextBox).TextChanged += new Addyoureventhandler here...
if (added is someotherclass)
(added as someotherclass).someotherevent += Addsomeothereventhandler here...
}
}