WPF路由命令和ShowDialog窗口

我想知道如何通过ShowDialog打开的窗口在Visual Tree中处理。

例如,窗口A通过ShowDialog打开窗口B. 在窗口B上触发路由命令时,窗口A不会接收到该命令(即使它正在侦听)。

有什么办法可以做到这一点?

谢谢! 乔恩


我们在应用程序中始终遇到这种情况。 我们使用Window.Owner属性和ICommandSource.CommandTarget属性来实现此目的。

例如,在窗口A中:

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

然后,在DialogWindow中,所有执行命令的控件都将其CommandTarget绑定到父窗口的Owner:

<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。

链接地址: http://www.djcxy.com/p/56193.html

上一篇: WPF Routed Commands and ShowDialog Windows

下一篇: Correct MVVM pattern WPF Command implementation