2010-04-25 2 views
2

Dans WPF, j'ai une fenêtre ouvrant une seconde fenêtre qui permet à certaines sélections de données de se produire. Une fois les sélections effectuées, je souhaite soumettre/fermer la fenêtre secondaire/secondaire et renvoyer les données à la fenêtre d'ouverture/parent.Comment envoyer des données à partir d'une fenêtre ouverte à son ouvreur dans WPF

Je peux envoyer des données dans la sous-fenêtre à partir du parent via les propriétés publiques, mais je n'ai pas cherché comment le récupérer dans l'autre sens. Quelqu'un peut-il aider s'il vous plaît?

Le code que je utilise pour ouvrir la fenêtre et définir certaines propriétés est a suit:

Dim wdwContacts As New appContacts() 
wdwContacts.selClientID = selClientID 
wdwContacts.selEmailToCCType = selEmailToCCType 
wdwContacts.pullToAddresses = txEmailTo.Text 
wdwContacts.pullCCAddresses = txEmailCC.Text 
wdwContacts.Owner = Me 
wdwContacts.WindowStartupLocation = Windows.WindowStartupLocation.CenterOwner 
wdwContacts.Show() 

La base est que j'ai la première fenêtre comme une page de composition de courrier électronique qui a un bouton lorsque vous cliquez dessus apporte une liste de contacts e-mail. Il introduit toutes les adresses e-mail précédemment sélectionnées dans la première fenêtre et les sélectionne automatiquement dans la sous-fenêtre/liste d'e-mails. Si d'autres sélections sont effectuées dans la liste des e-mails, lorsque l'opérateur clique sur le bouton done/submit/close, il repousse la nouvelle liste de sélection dans la zone de texte appropriée de la première fenêtre/parent.

Merci

Répondre

1

Vous pouvez définir les propriétés dans appContacts classe, puis gérer l'événement fermeture de la fenêtre et lire ces propriétés dans la fenêtre d'ouverture.

+0

@SLaks, j'ai pensé à faire cela, mais je ne savais pas comment déclencher l'événement dans la fenêtre d'ouverture. Je peux évidemment gérer l'événement Closing/Closed de la sous/seconde fenêtre, mais comment puis-je déclencher l'événement dans la fenêtre d'ouverture? – TravisPUK

+0

Que voulez-vous dire? – SLaks

+0

La fenêtre d'origine est ce que je veux dire. Comment puis-je déclencher l'événement pour mettre à jour les TextBox sur cette fenêtre lorsque la fenêtre sous/seconde a été fermée? Comment la fenêtre d'origine est-elle capable de détecter la fermeture de la fenêtre secondaire/seconde? – TravisPUK

5

Je vous suggère de définir un événement dans appContacts auquel vous pouvez vous abonner depuis votre classe d'appel. L'événement aurait alors le résultat de votre boîte de dialogue dans ses EventArgs. Cela vous permet d'économiser la vérification pour "a été fermé par OK plutôt que Annuler" dans votre classe appelante.

En code cela ressemblerait à ceci: D'abord, vous créez la classe EventArgs qui encapsule les données de retour de votre fenêtre:

public class WindowEventArgs : EventArgs 
{ 
    private readonly string username; 
    private readonly string password; 
    public string Username { get; private set; } 
    public string Password { get; private set; } 

    public WindowEventArgs(string username, string password) 
    { 
     this.username = username; 
     this.password = password; 
    } 
} 

Vous définissez ensuite un événement sur votre subwindow et de créer une méthode pour invoquer cette événement s'il y a des abonnés d'événements (s'il y en a que vous construisez la EventArgs classe et passez à l'événement):

public class SubWindow 
{ 
    public event EventHandler<WindowEventArgs> DialogFinished; 

    public void OnDialogFinished() 
    { 
     if (DialogFinished != null) 
      DialogFinished(this, new WindowEventArgs("some username", "some password")); 
    } 
} 

Dans la fenêtre de votre parent vous maintenant peut simplement brancher à la eventhandler lors de l'ouverture de la fenêtre:

public void OpenSubWindow() 
{ 
    var subWindow = new SubWindow(); 
    subWindow.DialogFinished += new EventHandler<WindowEventArgs>(subWindow_DialogFinished); 
} 

void subWindow_DialogFinished(object sender, WindowEventArgs e) 
{ 
    //Do Something with the results you get from e.Username & e.Password 
} 

évidemment je l'ai fait dans les classes pures C#, donc dans un monde réel WPF application serait un Sous-fenêtre enfant de cadre ou quelque chose, mais je l'espère illustre le point que je suis en train de faire. Vous devez maintenant appeler la méthode OnDialogFinished dans votre sous-fenêtre lorsque vous souhaitez renvoyer les données et fermer la fenêtre.

+0

@Tigraine, merci pour la réponse. Malheureusement, je suis un peu trop novice pour savoir comment m'abonner à l'événement de la classe appelante. Je vais faire quelques recherches à ce sujet cependant. – TravisPUK

+0

Merci pour votre aide Tigraine. – TravisPUK

+1

Pas de problème. Je devrais avoir suivi avec un exemple .. Éditera maintenant. – Tigraine

Questions connexes