12
votes

Passage de la variable avec Roudeventargs?

J'ai la classe suivante et je veux transmettre la variable de texte en tant que routéventargs.

  public partial class Window1 : Window
  {
    public static Window1 myWindow1;

    public Window1()
    {
      myWindow1 = this;
      InitializeComponent();
      this.AddHandler(CloseableTabItem.CloseTabsEvent, new RoutedEventHandler(this.CloseTab));
    }

    private void CloseTab(object source, RoutedEventArgs args)
    {      
      TabItem tabItem = args.Source as TabItem;
      if (tabItem != null)
      {
        TabControl tabControl = tabItem.Parent as TabControl;
        if (tabControl != null)
          tabControl.Items.Remove(tabItem);
      }
    }

    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
      CloseableTabItem tabItem = new CloseableTabItem("THIS IS A TEST");
      MainTab.Items.Add(tabItem);
    }
  }


1 commentaires

Merci, j'apprécie vraiment cette question et les amendements / ajouts que vous avez apportés.


3 Réponses :


13
votes

Créer une nouvelle sous-classe de routeDeventargs , ajoutez une propriété à ce que vous pouvez stocker la variable à transmettre et créer un délégué de gestionnaire respectif de type void (objet, yourneweventargs) que vous attribuez ensuite en tant que type de gestionnaire de votre événement (qui utilise actuellement un normal RouteDeDeHandler ne fournit donc que la normale routéteventargs ).

Si l'événement doit ensuite être soulevé, vous devez créer votre nouvel événement arguments et transmettre la variable à sa propriété pour cette variable. Comment obtenir la valeur dans le gestionnaire devrait être explicite de soi.


1 commentaires

@Arya: votre méthode Clostabs utilise toujours le générique routéventargs quand il devrait avoir Tabseventargs , vous pouvez alors obtenir le texte via args. Texte . Je ne sais pas pourquoi cela plantiserait, vous postez le message d'exception et la trace de pile si vous voulez de l'aide avec cela.



14
votes

J'avais besoin de quelque chose de similaire et avec l'aide de @arya et @ h.b. Je suis venu avec ceci:

My Custom Roudeventargs Sous-classe P>

private ItemListView createItemListView() {
    _itemListView = new ItemListView();
    _itemListView.GoToItemPropertiesView += new RoutedEventHandler(ChangePage);

    return _itemListView;
}

private void ChangePage(object sender, RoutedEventArgs e) {
    ChangePageEventArgs args = (ChangePageEventArgs)e;
    // Value of page number is 2
    int _pageNumber = args.PageNumber;
}


0 commentaires

0
votes

1 - Créez une nouvelle classe de données d'événement: xxx

2 - Créer un code de liaison dans un contrôle utilisateur: xxx

3 - Liez le contrôle de l'utilisateur dans une forme principale: xxx

4 - Derrière le code dans une forme principale: xxx

félicitations pour l'équipe WPF. Vous avez réalisé de le faire extrêmement complexe


0 commentaires