WPF获取父窗口

时间:2014-04-04 07:52:08

标签: c# .net wpf xaml parent

HY,

在我的MainWindow.xaml.cs文件中,我制作了一个getter来获取对我的列表框的引用。

public ListBox LoggerList
{
    get { return Logger; }
}    

现在我想从正常的类访问LoggerList但是我不工作。我尝试了以下方法:

MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;

但这仅适用于* xaml.cs文件,而不适用于普通的* .cs文件。

祝你好运

1 个答案:

答案 0 :(得分:17)

在WPF中有多种方法可以访问Window。如果你有几个打开,那么你可以像这样迭代它们:

foreach (Window window in Application.Current.Windows) window.Close();

如果您使用特定类型的自定义Window,则可以使用此选项:

foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>()) 
    ((YourCustomWindow)window).DoSomething();

如果您刚刚参考了MainWindow,那么您只需使用它:

Window mainWindow = Application.Current.MainWindow;

但是,使用此方法,它有可能返回null。在这种情况下,请确保在其构造函数中将MainWindow设置为此属性:

// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;

但是应该注意,@ woutervs是正确的......你应该从库类中的Window访问UI控件。你真的应该将数据绑定到ListBox.ItemsSource,然后操纵数据集合。


更新&gt;&gt;

我不知道您的Application.Current对象为何null ...这可能是因为您已将类库加载到其他AppDomain中。无论哪种方式,我认为你错过了大局。实际上没有理由为类库类需要对主Window的引用。

如果您需要对数据集合执行一些工作,那么只需从后面的代码或视图模型传递数据集合。工作完成后,只需将其传递回UI,即可访问ListBox和/或绑定到ItemsSource属性的数据集合。