Frage

Ich habe in einem Itemscontrol Container (Template Stackpanel) meine Benutzersteuerelemente platziert, die dynamisch hinzugefügt und entfernt zu bekommen, während die Anwendung ausgeführt wird. Wie kann ich Route ein Ereignis (zum Beispiel Textchanged oder GotFocus) Trog alle Elemente in meinem Usercontrol (besteht hauptsächlich aus Textfeldern)? Ist das, wo ich sollte „Teilnehmer“ oder ICommand verwenden? Ich bin neu in diesem und wahrscheinlich bin ich mischen ein paar Dinge.

Danke!

War es hilfreich?

Lösung

Ich bin zwischen den Zeilen Ihrer Frage lesen ziemlich viel, aber ich vermute, dass Sie (und lösen) Event-Handler für jede Ihrer Kontrollen Kinder anhängen möchten, wenn sie hinzugefügt werden (und entfernt).

Versuchen Sie Itemssource auf eine ObservableCollection Einstellung. Anschließend können Sie einen Event-Handler zu Ihrem ObservableCollection.CollectionChanged Ereignis zuordnen. In den Event-Handler können Sie Event-Handler Ihre Kinder, wie sie hinzugefügt und entfernt werden.

anschließen oder entfernen
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...
       }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top