2012-05-23 5 views
0

J'ai un formulaire WPF qui est constitué de UserControls et non de Windows. Contrairement à Windows, les UserControls n'ont pas de UserControl.Close ou de UserControl.Closing. Je dois être en mesure d'exécuter du code lorsque mon application est fermée en cliquant sur le x rouge familier dans la partie supérieure droite de l'application. Est-ce que quelqu'un à déjà fait ça? Gardez à l'esprit que j'utilise MVVM.XAML - Exécuter le code lorsque le formulaire WPF se ferme

Voici le XAML pour la page:

<UserControl x:Class="ClassName" 
      <!--etc..--> 
      > 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <!--Columns--> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <!--Rows--> 
     </Grid.RowDefinitions> 
     <!--WPF Content--> 
    </Grid> 
</UserControl> 

Répondre

1

La commande usercontrol n'a pas d'événement de fermeture et de fermeture. donc vous pouvez utiliser déchargé mais le déchargé ne pas être tiré automatiquement

pour disposer les usercontrols lire l'article ci-dessous.

http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-usercontrol-ish.aspx

+0

Bon point sur l'événement déchargé, réalisé après avoir écrit ma réponse. Le meilleur pari est vraiment l'arrêt Dispatcher ou l'événement de sortie de l'application. – dowhilefor

0

Vous n'avez pas les fenêtres? Comment est-ce possible? Les créez-vous en dehors de l'écran?

Eh bien, vous ne pouvez pas le faire complètement en XAML évidemment, mais qu'en est-il Application.Exit si vous voulez être informé avant de fermer votre application. Si vous voulez une solution interceptable et annulable, vous pouvez utiliser le Closing sur votre fenêtre principale, si vous en avez une. Bien sûr, l'événement Closed est également une solution. Et last but not least, vous avez le Unloaded event sur vos contrôles utilisateur.

Espérons que cela vous aide un peu.

+0

J'utilise le goût Phoenix de MVVM. Aucune fenêtre nécessaire. Vous utilisez un HomeControler pour suivre toutes vos «fenêtres». À l'intérieur du HomeController est un constructeur pour chaque «fenêtre» qui est appelée chaque fois que vous définissez une commande «Invoke.OnClick» d'une tuile à '« Home.NameOfWindow »'. "Décharger" est proche de la seule chose qui va fonctionner. Le problème est, c'est que lorsque vous quittez l'application en utilisant le x rouge, 'Unload' ne se produit jamais. – Stylzs05

+0

Eh bien, il n'y a que l'objet application, qui est une sorte de singleton, où vous pouvez écouter l'événement Exit. – dowhilefor

+0

J'essaie de comprendre où l'application écoute pour une fermeture ou une sortie. Je te dis, je ne suis pas fan de MVVM. – Stylzs05

Questions connexes