WPF маршрутизируемые команды и ShowDialog Windows - PullRequest
2 голосов
/ 11 декабря 2008

Мне было интересно, как окно, открытое через ShowDialog, обрабатывается в Visual Tree.

Например, окно A открывает окно B с помощью ShowDialog. При запуске перенаправленной команды в окне B окно A не получает команду (даже если она ее ожидает).

Есть ли способ заставить эту работу?

Спасибо! Jon

1 Ответ

5 голосов
/ 11 декабря 2008

Мы постоянно сталкиваемся с такой ситуацией в нашем приложении. Для этого мы используем свойство Window.Owner и свойство ICommandSource.CommandTarget.

Например, в окне A:

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

Затем в DialogWindow всем элементам управления, выполняющим команды, назначается CommandTarget, связанный с владельцем родительского окна:

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

Или, если вы выполняете код из окна B:

SomeCommand.Execute(params, this.Owner);

CommandTarget позволит Window A прослушивать CanExecute и Execute.

...