在我的WPF应用程序(csharp)中,我有一个事件处理程序,当触发时将打开应用程序的新窗口(窗口B)并显示一些数据.但是,当再次触发事件时,如果新窗口(窗口B)仍然打开,我不想生成窗口B的另一个实例,而只是更新当前实例中显示的数据.所以问题是:如何检测窗口B是否已经存在且仅在尚未打开时才打开,否则只需更新数据?
我找到了Application.Current.Window集合,但不知怎的,这对我来说还不起作用.想法?
您可以在WindowB中创建一个LoadWindow()方法,您可以调用该方法来加载(或刷新)数据,无论窗口是否已打开,该方法都将起作用.当这个窗口关闭时,是否需要代理人才能打电话:
private Action ParentCallbackOnClose;
public void LoadWindow( Action parentCallbackOnClose ) {
// load the data (set the DataContext or whatever)
ParentCallbackOnClose = parentCallbackOnClose;
// Open the window and activate/bring to the foreground
Show( );
Activate( );
}
Run Code Online (Sandbox Code Playgroud)
让你的窗口关闭事件调用close委托:
private void WindowClosed( object sender, EventArgs e ) {
ParentCallbackOnClose.Invoke( );
}
Run Code Online (Sandbox Code Playgroud)
现在,从打开Window B的类开始,让它保持打开的那个实例,这样如果有人试图重新加载它时WindowB已经打开,它就会在现有实例上调用LoadWindow.就像是...
private WindowB WinB;
private void LoadWindowB(Content content)
{
if (WinB == null ){
WinB = new WindowB( );
}
WinB.LoadWindow(content, WindowBClosed);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以让它在关闭回调上使WinB无效,所以如果WinB关闭,那么下次调用LoadWindowB()时它将创建一个新的实例:
private void WindowBClosed( ){
WinB = null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9671 次 |
| 最近记录: |