2009-12-16 6 views
0

j'ai un objet qui sous une forme simplifiée est la suivante:WPF MessageBoxes et DataTemplates

public class MyObject 
{ 
    public bool Activate { 
    get { MessageBox.Show("My Status"); } 
    set { Do Some Stuff } 
} 

Je DataTemplate que les cartes de la propriété « Activer » à une case à cocher comme ceci:

<DataTemplate x:Key="ComponentResourceKey TypeInTargetAssembly={x:Type local:PropertyGrid}, ResourceId={x:Type clr:Boolean}}"> 
     <CheckBox IsEnabled="{Binding Path=IsWriteable}" IsChecked="{Binding Path=Value}"/> 
</DataTemplate> 

Le modèle provient du contrôle WPF Property Grid que j'utilise. Le problème est que la boîte de message n'est jamais montrée et la fenêtre principale attend une réponse de la boîte. J'entends la notification d'erreur retentir lorsque l'appel est attendu mais aucune boîte de dialogue n'est présente.

Y a-t-il quelque chose dans WPF qui modifie l'ordre z? Est-ce que je cours dans un contexte auquel je ne m'attends pas?

Répondre

1

Vous ne devriez jamais afficher un messagebox dans un getter! Utilisez plutôt les commandes.

Si vous transmettez le MessageBox.Show appelez la fenêtre en cours en tant que paramètre, il doit être affiché modal.

+0

Essayé avec des commandes et il fait toujours la même chose. La commande est liée dans XAML sur la fenêtre principale. La commande est ensuite exécutée depuis la propriété ci-dessus. Le gestionnaire d'événements pour execute est appelé et un MessageBox.Show est trouvé dans le gestionnaire. J'entends le son du dialogue se présenter mais il n'est pas affiché. Des idées? –

+0

Pourquoi exécutez-vous la commande dans le getter? Laissez le WPF l'exécuter en utilisant l'une des solutions que vous trouverez via google pour mapper les commandes aux événements. – Matthias

+0

Ce que je cherchais vraiment était la gestion de la validation. Merci d'avoir essayé d'aider et désolé d'être têtu. –