9
votes

Comment appeler la méthode de la fenêtre principale du WPF de la fenêtre modale?

Comment appeler la méthode de la fenêtre principale du WPF de la fenêtre modale?

(En fait, je veux démarrer une minuterie du mainwindow.xaml.cs lorsque je ferme une fenêtre de modèle.)

Merci!


0 commentaires

5 Réponses :


2
votes

Il y a beaucoup de façons de faire cela.

Vous pouvez surcharger le constructeur de la fenêtre modale de telle sorte que vous puissiez transmettre une référence à cette fonction, ou la fenêtre principale. Ou, ajoutez une propriété à cette fenêtre.

Vous pouvez également démarrer la minuterie de la ligne suivante dans le code de la fenêtre principale indiquant la fenêtre modale.


0 commentaires

17
votes

Ce que vous pouvez faire est avant d'ouvrir votre deuxième fenêtre Attribuer la fenêtre principale en tant que propriétaire, puis à partir de la fenêtre modale appelez la propriété propriétaire, jeté dans un objet Mainwindowow et vous pourrez exécuter la méthode.

// Code in main window
ModalWindow window = new ModalWindow();
window.Owner = this; 
window.ShowDialog()

//Code on the modal window
var myObject = this.Owner as MainWindow;
myObject.MyMethod(); // Call your method here.


1 commentaires

Je reçois ceci: "Impossible de définir la propriété propriétaire vers une fenêtre qui n'a pas été montrée précédemment". Il semble que window.Owner ne peut pas précéder Showdialog ...



2
votes
  • Si cette fenêtre de modèle s'ouvrira du MAINWINDOW , comme ça, disons

    modalwindow.showdialog ()

    Il suffit d'ajouter le code après cet appel et il sera exécuté après la fermeture de la fenêtre modale.

  • Si la fenêtre modale est ouverte ailleurs, mais à la fermeture doit exécuter le code sur une pièce parfaitement non liée, peut utiliser, par exemple, Commandes ou RelaisCommand (type d'appel de délégué direct).

    J'espère que cela aide.


0 commentaires

0
votes

Vous pouvez joindre un gestionnaire d'événements à l'événement "Clôture" de la boîte de dialogue modale, qui serait exécuté dans le programme principal lorsque la boîte de dialogue tire cet événement.


0 commentaires

5
votes
public class ModalWindow : Window
{
    private MainWindow _parent;
    public ModalWindow(MainWindow parent)
    {
        _parent = parent;
        Owner = parent;
    }

    void CallParent()
    {
        _parent.Call();
    }
}
I would suggest this kind of pattern is a code smell.  If your goal is to pass information from the modal to the parent, better to expose properties on the modal window and, after it closes, read those values and perform whatever actions are necessary in the parent.  If your goal is to pass information from the parent to the modal, then pass it into the constructor or public properties before calling ShowDialog().

0 commentaires