在好的(好!!)WinForms时代,datagrids行用作实际控件,然后您可以访问DataItem。
在WPF中,它全部翻转,dataGrid.Items只是源数据。
我可能以错误的方式执行此操作,因为我有点像WPF newb但是如何迭代我的gridview行抓取某些标签,文本框等的值?
答案 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表示行上显示的数据。 希望这会有所帮助。