WPF获取父窗口

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

最好的祝福

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

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

如果您有特定类型的自定义Window ,则可以使用以下命令:

 foreach (Window window in Application.Current.Windows.OfType()) ((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 ,然后操作数据集合。


更新>>

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

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