WPF ItemsControl: направить событие TextChanged ко всем элементам UserControl - PullRequest
0 голосов
/ 18 июня 2009

Я поместил в Контейнер ItemsControl (Template Stackpanel) мои UserControls, которые динамически добавляются и удаляются при запуске приложения. Как я могу направить Событие (например, TextChanged или GotFocus) через все элементы в моем UserControl (состоит в основном из TextBoxes)? Это где я должен использовать «Делегаты» или ICommand? Я новичок в этом и, вероятно, я путаю несколько вещей.

Спасибо!

1 Ответ

1 голос
/ 18 июня 2009

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

Попробуйте установить для вашего 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...
       }

}
...