2009-06-18 9 views
0

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

Спасибо!

ответ

1

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

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

} 

 Смежные вопросы

  • Нет связанных вопросов^_^