WPF中Datagrid事件问题?

yusend 2013-08-29 05:19:46
我用一个函数来遍历整个datagrid所有行来根据条件改变每行的颜色.

public static void ConvertRow()
{
TenantsListWindow TLW = (TenantsListWindow)TL;//获取那个窗口.
for (int i = 0; i < TLW.tenantsDg.Items.Count; i++)
{
Quartecost quarte = TLW.tenantsDg.Items[i] as Quartecost;
string state = quarte.State.Trim();//根据条件判断
if (state == "已交")
{
var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow;
row.Background = new SolidColorBrush(Colors.DarkSeaGreen);
}
else
{
var row = TLW.tenantsDg.ItemContainerGenerator.ContainerFromItem(quarte) as DataGridRow;
row.Background = new SolidColorBrush(Colors.IndianRed);
}
}
}

但这个函数如果放在窗口加载完毕或者Datagrid加载完毕事件里就不行
但我如果放在一个按钮的单击事件里面就可以. 甚至于我放在Datagrid的鼠标移动的事件里都可以.
但我只要放在Datagrid.ItemSource下面就不行.
例:

private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
tenantsDg.ItemsSource = QuartecostDAL.GetAll(community);
//GetAll返回一个List<Quartecost>集合;
CommunityManagerSystemTools.TL = this;
CommunityManagerSystemTools.ConvertRow();
}

但像下面这样就可以
例:

private void dayinBut_Click(object sender, RoutedEventArgs e)
{
CommunityManagerSystemTools.ConvertRow();
//上面的方法我定义在CommunityManagerSystemTools这个类里
}


断点查看错误的原因是row为空.但是类型变量quarte中是有内容的!
偶也不知道是什么原因,新手求赐教!
...全文
297 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yusend 2013-08-30
  • 打赏
  • 举报
回复
引用 4 楼 MicrosoftCenterOfHN 的回复:
其实你做了这么多尝试,也算是找到原因了。 你在loaded事件中写代码的话,发现row是空的,即那个container尚不存在,还未加载。 而当你把代码写到一个button的事件中时,发现这个row是存在的,这说明这时候那个container已经加载好了。 说明,在窗口的生命周期中,loaded事件被触发时,尚有些初始化工作未完成。针对你这个贴子中的情况。把你的代码放到ContentRendered事件中就可以了,这个事件在loaded事件之后触发。当触发ContentRendered事件时,你这里需要的加载工作已经完成了,可以执行你的代码了。
太感谢你了,我确实发现了,但不知道哪个事件是可以加载完成之后在运行的,也没有找到网上说loadcomplete. Thinks!!
  • 打赏
  • 举报
回复
其实你做了这么多尝试,也算是找到原因了。 你在loaded事件中写代码的话,发现row是空的,即那个container尚不存在,还未加载。 而当你把代码写到一个button的事件中时,发现这个row是存在的,这说明这时候那个container已经加载好了。 说明,在窗口的生命周期中,loaded事件被触发时,尚有些初始化工作未完成。针对你这个贴子中的情况。把你的代码放到ContentRendered事件中就可以了,这个事件在loaded事件之后触发。当触发ContentRendered事件时,你这里需要的加载工作已经完成了,可以执行你的代码了。
yusend 2013-08-29
  • 打赏
  • 举报
回复
难道没有人知道这个吗?
yusend 2013-08-29
  • 打赏
  • 举报
回复
谁能救救我啊
yusend 2013-08-29
  • 打赏
  • 举报
回复
求赐教啊,这问题困扰我好几天了!

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧