在寻找解决方案几个小时后,我需要一些帮助。
我有一个带有主窗口的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指令或汇编参考?)
有人知道吗?
答案 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