WPF 怎么访问主窗体里面的控件 20

做了一个datagridName为dg,单击一个按钮后弹出一个新的窗体,我在窗体里面写了将数据库内容显示到datagrid上,但是会报错:上下文不存在dg,自己摸索下改了... 做了一个datagrid Name为dg,单击一个按钮后弹出一个新的窗体,我在窗体里面写了将数据库内容显示到datagrid上,但是会报错:上下文不存在dg,自己摸索下改了下:var frm = (this.Parent as MainWindow);frm.dg.itemsSource=……也会报错:frm一直为null,该怎么解决 展开
 我来答
秋俊在路上
2015-08-10 · 超过85用户采纳过TA的回答
知道答主
回答量:117
采纳率:0%
帮助的人:111万
展开全部
新窗体和主窗体不是父子关系,当然找不到。
这两种窗体间的交互我知道的有几种方法
1:设置子窗体的拥有者为主窗体
2:使用一个全局变量,并在变量改变通知主窗体
3:使用Prism的aggregaterg事件,子窗口发布聚合事件,主窗体接收
追问
具体代码呢,不会写
追答
1:例如 MainWindow是主窗体,SubWindow是子窗体

在主窗体中弹出新窗体时

SubWindow sub=new SubWindow();
sub.Owner=this

sub.Show();
这时你在subwindow就可以查找到MainWindow
Window w = this.Owner; 这里的w就是你的主窗体了
DataGrid grid = w.FindName("dg") as DataGrid; 这就是主窗体上的Datagrid控件了,这样你想怎么样就怎么样了
2:有点麻烦就不说了
3:使用前先引用 Microsoft.Practices.Prism.Events;
第一步:在基础模块中定义事件
public class SendTextEvent
: CompositePresentationEvent { }
这里的string只是表示方便,可以是任何类
第二步,在子窗体中发布事件
private IEventAggregator eventAggregator = ServiceLocator.Current.GetInstance(); 这是字段
eventAggregator.GetEvent().Publish(SendMessage);这是你要传递的数据
第三步,订阅事件
IEventAggregator eventAggregator= ServiceLocator.Current.GetInstance();

SubscriptionToken token =
eventAggregator.GetEvent().Subscribe(GetText);;
private void GetText(string obj)

{

//在这里处理你的数据

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式