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

时间:2012-04-27 11:42:48

标签: c# .net wpf wpf-controls

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

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

我尝试实现的是从CanSubMessages窗口更新MainWindow上的datagrid。听起来很简单吧?

我从CanSubMessages执行以下操作:

Window rootWindow = Application.Current.MainWindow as Window;
rootWindow.CanDataGridMessagesCh1.Items.Refresh();

CanDataGridMessagesCh1是MainWindow中的数据网格。它的名称在相应的XAML中给出:

<DataGrid x:Name="CanDataGridMessagesCh1" AutoGenerateColumns="False" ...

我不明白为什么这个控件不可访问。这是我得到的错误:

'System.Windows.Window'不包含'CanDataGridMessagesCh1'的定义,并且没有可以找到接受类型'System.Windows.Window'的第一个参数的扩展方法'CanDataGridMessagesCh1'(你是否缺少using指令或汇编参考?)

有人知道吗?

1 个答案:

答案 0 :(得分:1)

这条线错了:

Window rootWindow = Application.Current.MainWindow as Window; 

应该是

Window rootWindow = Application.Current.MainWindow as MyWindowClass; 

修改

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

以下示例假设您正在从主窗口创建子窗口,并且已将主窗口类型添加到子窗口构造函数中

ChildWindow cw = new ChildWindow(this);

然后在您的子窗口中:

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