如何访问WPF DataGrid中的控件

时间:2010-07-28 16:48:28

标签: c# wpf datagrid

在好的(好!!)WinForms时代,datagrids行用作实际控件,然后您可以访问DataItem。

在WPF中,它全部翻转,dataGrid.Items只是源数据。

我可能以错误的方式执行此操作,因为我有点像WPF newb但是如何迭代我的gridview行抓取某些标签,文本框等的值?

2 个答案:

答案 0 :(得分:0)

是的,你这样做是错误的。您应该做的是遍历数据源中的项目 - 毕竟这是所有值的所在。

可以遍历WPF对象,但这并非易事。如果你尝试的话,你会遇到一个很大的问题。

您可以使用VisualTreeHelper类搜索可视树并找到DataGrid的后代对象。如果你玩这个足够长的时间,最终你会弄清楚如何找到你正在寻找的特定控件。但是DataGrid(实际上,其控件模板中的VirtualizingStackPanel)虚拟化了它的可视化子项。如果某个项目尚未出现在屏幕上,则尚未创建其WPF对象,您将无法在可视树中找到它们。你可能无法找到你想要的东西,不是因为你找不到它,而是因为它不存在。

如果你在绑定中使用值转换器和格式化(这是我想到你想要查看WPF对象而不是底层数据项的唯一原因),我恐怕答案是:不要那样做。在数据源中进行值转换和格式化,并将结果公开为可以直接绑定的属性。

当然可以在不使用MVVM模式的情况下使用WPF。但是,如果你不这样做,那就是你可以遇到的那种砖墙。

答案 1 :(得分:0)

您可以使用此

    public DataGridRow TryFindRow(object item, DataGrid grid)
    {
        // Does not de-virtualize cells
        DataGridRow row = (DataGridRow)(grid as ItemsControl).ItemContainerGenerator.ContainerFromItem(item);

        return row;
    }

其中item表示行上显示的数据。 希望这会有所帮助。