2008-12-11 6 views
2

Je me demandais comment une fenêtre ouverte via ShowDialog est traitée dans l'arborescence Visual. Par exemple, la fenêtre A ouvre la fenêtre B via un ShowDialog. Par exemple, la fenêtre A ouvre la fenêtre B via un ShowDialog. Lorsque vous lancez une commande routée sur la fenêtre B, la fenêtre A ne reçoit pas la commande (même si elle l'écoute).Commandes routées WPF et Windows ShowDialog

Y at-il un moyen de faire ce travail?

Merci! Jon

Répondre

5

Nous rencontrons cette situation tout le temps dans notre application. Nous utilisons la propriété Window.Owner et la propriété ICommandSource.CommandTarget pour cela.

Par exemple, dans la fenêtre A:

DialogWindow windowB = new DialogWindow(); 
windowB.Owner = this; 
windowB.ShowDialog(); 

Puis, en DialogWindow, toutes les commandes qui exécutent des commandes ont leur CommandTarget lié au propriétaire du parent fenêtre:

<Window x:Class="DialogWindow" x:Name="wnd"> 
    <Button Command="SomeCommand" CommandTarget="{Binding Owner, ElementName=wnd}"/> 
</Window> 

Ou bien, si vous exécutez du code à l'intérieur de la fenêtre B:

SomeCommand.Execute(params, this.Owner); 

CommandTarge t permettra à la fenêtre A d'écouter CanExecute et Execute.

Questions connexes