• wpf DataGrid遍历


    理论上WPF程序需要修改的是数据源而不是修改控件值,修改数据源后是否需要编写重新绑定代码?

    你这个是从其它的UI框架(例如asp.net)套用来的习惯。 真正的做法,是不要去遍历控件的 Items,应该去访问你的数据源。再设计 UI 控件时,开发者保证它与数据源(例如实现了 ObservableCollection<T> 模板的集合)保持双向绑定(不但绑定内容记录,而且绑定集合的变化)。但是并不提供你去遍历控件的 Items 的机制! 在桌面的控件中,由于大量重复使用控件,因此控件占用的内存是个大问题。所以这类数据绑定控件通常会复用 Item 对应的控件。例如 DataGrid 可能只保持30行子控件,当你的数据有30000行时,另外29970行并不对应任何子控件。当最终用户在界面上上下滚动屏幕区域时,已经离开可见区域的子控件可能会触发一个类似 xxxxxUnload 的事件,随后就被重新用新数据绑定了(而不是销毁了),重新绑定之后就会再触发一个类似 xxxxxLoad 的事件。 也就是说,子控件的自动重用的。如果你遍历这些子控件,你只会得到较少的、绑定数据貌似混乱的结果。因为之后当前可见的那些子控件对象实例才保证绑定的数据是准确的,它们过了瞬间就会绑定到其它数据上! 所以要遍历DataGrid之类的控件所绑定的数据集合,那么就去遍历数据集合。千万不要自作聪明地去遍历其Items控件集合、在通过Item去访问绑定的数据对象,这是不会有稳定的和准确的结果的。

    如果 DataGrid 中的行还未被加载,即 LoadingRow 事件未发生,那么针对此行的 GetCellContent() 是不可能得到东西的,只能为 null。

     下面两种语法,只是变相的形式而已。

        for (int i = 0; i < dgETL.Items.Count; i++)
                {
                    CheckBox selectCheckBoxInCell = dgETL.Columns[0].GetCellContent(dgETL.Items[i]) as CheckBox;
                    if (selectCheckBoxInCell != null)
                    {
                        selectCheckBoxInCell.IsChecked = cbxOne.IsChecked;
                    }
                }

                foreach (var item in dgETL.Items)
                {
                    CheckBox selectCheckBoxInCell = dgETL.Columns[0].GetCellContent(item) as CheckBox;
                    if (selectCheckBoxInCell != null)
                    {
                        selectCheckBoxInCell.IsChecked = cbxOne.IsChecked;
                    }
                }

     GridViewRow s = ((GridViewRow)PSFileDataGrid.ItemContainerGenerator.ContainerFromIndex(1));
                if (s != null)
                {
                    Button sb = null;
                    GridViewCellBase j =
                          (from c in s.Cells where c.Column.Name == "uid" select c).FirstOrDefault();
                    if (j != null)
                    {
                        sb = j.Template.FindName("button1", j) as Button;
                        sb.IsEnabled = false;
                    }

                }

  • 相关阅读:
    CSS3—— 2D转换 3D转换 过渡 动画
    CSS3——边框 圆角 背景 渐变 文本效果
    CSS3——表单 计数器 网页布局 应用实例
    CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器
    CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单
    CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
    CSS3——盒子模型 border(边框) 轮廓(outline)属性 margin外边距 padding填充
    Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
    数据库——单表查询
    数据库——添加,修改,删除
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/15212872.html
Copyright © 2020-2023  润新知