2009-06-18 9 views
0

Ich habe in einem ItemsControl-Container (Template Stackpanel) meine UserControls platziert, die beim Ausführen der Anwendung dynamisch hinzugefügt und entfernt werden. Wie kann ich ein Ereignis (z. B. TextChanged oder GotFocus) durch alle Elemente in meinem UserControl (besteht hauptsächlich aus TextBoxen)? Soll ich hier "Delegates" oder ICommand verwenden? Ich bin neu und wahrscheinlich vermische ich ein paar Dinge.WPF ItemsControl: Route TextChanged-Ereignis an alle UserControl-Elemente

Danke!

Antwort

1

Ich lese zwischen den Zeilen Ihrer Frage ziemlich viel, aber ich vermute, Sie möchten Ereignishandler an jedes Ihrer Steuerelemente unterlegen, sobald sie hinzugefügt (und entfernt) werden.

Versuchen Sie, Ihre ItemsSource auf eine ObservableCollection zu setzen. Sie können dann einen Ereignishandler an Ihr ObservableCollection.CollectionChanged-Ereignis anhängen. In diesem Event-Handler können Sie Event-Handler an Ihre Kinder anhängen oder entfernen, wenn sie hinzugefügt und entfernt werden.

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... 
     } 

} 
Verwandte Themen