由于项目需要,在wpf中绑定datagrid的数据源之后,要在后台对显示的数据进行操作,但怎么也找不到关于数据绑定完成的事件,直接在绑定代码后取行中的控件得到的是null,怎么办?
代码如下:
this.gd_Projects.ItemsSource = DAL.ProjectDAL.GetProsByName(name, "", "", "");
foreach (var o in this.gd_Projects.Items)
{
TextBlock tb = this.gd_Projects.Columns[0].GetCellContent(o) as TextBlock;
if (tb != null)
{
tb.Text = "";
}
}
foreach循环里的代码直接带绑定时使用,就会得到null,如果等绑定结束后,手动点一个按钮触发这段代码就能正确获取控件
没有绑定完成这么一说,你要在xaml中binding了,后面直接操作就行了,要是在后台设置itemsource,设置完了就能直接操作。至于取行中的控件得到null,有两种可能,绑定有问题,取控件有问题。 建议贴代码
问一下
this.gd_Projects.ItemsSource = DAL.ProjectDAL.GetProsByName(name, "", "", ""); foreach (var o in this.gd_Projects.Items) { TextBlock tb = this.gd_Projects.Columns[0].GetCellContent(o) as TextBlock; if (tb != null) { tb.Text = ""; } }
这段代码写在程序的什么位置?构造函数的 InitializeComponent();之前?
@WuRang: 这段代码是在点击查询按钮时触发的
@西西里的晚祷: 你的意思是这段代码一起执行就会得不到控件,先写
this.gd_Projects.ItemsSource = DAL.ProjectDAL.GetProsByName(name, "", "", "");
然后按钮执行
foreach (var o in this.gd_Projects.Items) { TextBlock tb = this.gd_Projects.Columns[0].GetCellContent(o) as TextBlock; if (tb != null) { tb.Text = ""; } }就可以了么?
@WuRang: 对的,所以我需要找到像winform中的datagrid的数据绑定完成事件,才能做到这一点
wpf 没有绑定完成一说吧。 如果想实现你的功能 请转化思路。 你对wpf 理解有误, 不能安装winform 那套来写,。 要让数据驱动UI。