WPF获取父窗口

use*_*964 13 .net c# wpf xaml parent

HY,

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

public ListBox LoggerList
{
    get { return Logger; }
}    
Run Code Online (Sandbox Code Playgroud)

现在我想从普通类访问LoggerList但我不工作.我尝试了以下方法:

MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
object selectedItem = parentWindow.LoggerList;
Run Code Online (Sandbox Code Playgroud)

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

最好的祝福

She*_*dan 17

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

foreach (Window window in Application.Current.Windows) window.Close();
Run Code Online (Sandbox Code Playgroud)

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

foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>()) 
    ((YourCustomWindow)window).DoSomething();
Run Code Online (Sandbox Code Playgroud)

如果你刚刚参考了MainWindow,那么你可以简单地使用这个:

Window mainWindow = Application.Current.MainWindow;
Run Code Online (Sandbox Code Playgroud)

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

// From inside MainWindow.xaml.cs
Application.Current.MainWindow = this;
Run Code Online (Sandbox Code Playgroud)

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


更新>>

我不知道为什么你的Application.Current对象是null...它可能是因为你已经将你的类库加载到另一个AppDomain.无论哪种方式,我认为你错过了大局.实际上没有理由为类库类需要对main的引用Window.

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