2010-05-31 3 views
4

J'ai créé une fenêtre WPF et fait une exportation MEF.ShowDialog sur des composants MEF ne fonctionne qu'une fois

je peux faire une ShowDialog fois sur l'importation, mais MEF la deuxième fois qu'il avorte parce que le composant MEF a été fermé par le premier ShowDialog.

Que peut-on faire pour permettre des répétitions de ShowDialog?

Répondre

3

Lorsque vous appelez ShowDialog sur une fenêtre WPF deux fois comme ceci:

var window = new Window(); 
window.ShowDialog(); // returns when user closes first window 
window.ShowDialog(); // throws 

vous obtiendrez un InvalidOperationException avec ce message:

Impossible de définir la visibilité ou appelez Afficher ou ShowDialog après fenêtre a fermé.

Pour résoudre ce problème, vous devez recréer la fenêtre à chaque fois, par ex. comme ceci:

var window = new Window(); 
window.ShowDialog(); 
window = new Window(); 
window.ShowDialog(); 

Pour faire en MEF, vous pourriez exporter un composant contrôleur distinct qui est responsable de la création et montrant votre boîte de dialogue (plutôt que d'exporter votre dialogue directement):

[Export] 
public class MyDialogController 
{ 
    public void ShowMyDialog() 
    { 
     using (var myDialog = new MyDialog()) 
     { 
      myDialog.ShowDialog(); 
     } 
    } 
} 
+0

bien fait Wim Coenen, bien fait. Cela devrait marcher pour ma situation. – BSalita

0

plus des exemples sur la façon d'utiliser dans une application MEF WPF se trouvent dans le WPF Application Framework (WAF) télécharger projet (consulter les exemples d'applications).

Questions connexes