C# 如何访问另一个窗口上的控件

C# 如何访问另一个窗口上的控件,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,经过几个小时寻找解决方案后,我需要一些帮助 我有一个WPF应用程序,它有一个主窗口和一个使用RibbonWindow类的第二个窗口。问题是我无法从第二个窗口访问主窗口上的控件(datagrid)。第二个窗口称为(在类中称为)CanSubMessages。MainWindow继承自RibbonWindow,CanSubMessages继承自Window 我试图实现的是从CanSubMessages窗口更新主窗口上的datagrid。听起来很简单,对吗 我从CanSubMessages执行以下操作:

经过几个小时寻找解决方案后,我需要一些帮助

我有一个WPF应用程序,它有一个主窗口和一个使用RibbonWindow类的第二个窗口。问题是我无法从第二个窗口访问主窗口上的控件(datagrid)。第二个窗口称为(在类中称为)CanSubMessages。MainWindow继承自RibbonWindow,CanSubMessages继承自Window

我试图实现的是从CanSubMessages窗口更新主窗口上的datagrid。听起来很简单,对吗

我从CanSubMessages执行以下操作:

Window rootWindow = Application.Current.MainWindow as Window;
rootWindow.CanDataGridMessagesCh1.Items.Refresh();
CanDataGridMessagesCh1是主窗口中的数据网格。其名称在相应的XAML中给出,带有:

<DataGrid x:Name="CanDataGridMessagesCh1" AutoGenerateColumns="False" ...
这行是错误的:

Window rootWindow = Application.Current.MainWindow as Window; 
应该是

Window rootWindow = Application.Current.MainWindow as MyWindowClass; 
编辑

另一种解决方案是在子窗口中包含对主窗口的引用:

var mainwindow = this.MainWindow; // from the constructor
下面是一个示例,假设您正在从主窗口创建子窗口,并且已将主窗口类型添加到子窗口构造函数中

ChildWindow cw = new ChildWindow(this);
然后稍后在您的子窗口中:

var mainwindow = this.MainWindow; // from the constructor

实际上,
MyWindowClass rootWindow=…
,否则它将无法再次编译。旁注:作为一种良好的做法,我建议在另一个窗口中创建一个方法,类似于:public void UpdateMessageItems()。这将改善类之间的隔离。感谢您的提示,但是MyWindowClass似乎是未知的。有没有我需要使用的特殊用法?@wlamers:使用主窗口的实际类型。@wlamers:看我的第一条评论:)