我有一个包含 20 列左右的 SDK:DATAGRID,当它打开时只显示四个字段/列。这就是我想要的以及我是如何设计它的
基本上我是根据用户点击来获取信息 - 示例:
OWNERNAME.Text = ((TextBlock)EPICGrid.Columns[1].GetCellContent(EPICGrid.SelectedItem)).Text;
和/或
OWNERNAME2.Text = ((TextBlock)EPICGrid.Columns[16].GetCellContent(EPICGrid.SelectedItem)).Text;
我遇到的内容不会抓取单元格中的信息,除非我滚动并显示该列,因此我只能抓取前 4 列数据,因为它们会显示网格何时可见。
我无法从第 5 -20 列中获取数据,除非我滑过并使这些列可见。在单击期间它们不必可见......似乎在我查看该列之前数据并没有真正加载。
我想我应该说第一条记录/行加载所有数据/单元格/列,我可以从第一条记录中获取任何数据,但问题发生在记录 2 - *。
只是为了澄清 - 我的问题不是我的列或行的可见性。我的问题是 SDK DataGrid 似乎是按需加载数据。因此,如果该列在某一时刻不在视图中,则单元格中的信息不可用。
我不想显示所有列,也不想让用户能够查看所有列,所以我想禁用滚动条但是当用户点击某一行时,我需要在某些单元格中获取信息并且由于该列尚未加载,因此信息不存在。
如何关闭按需加载功能?
我进行了搜索,发现有人在加载行时遇到了类似的问题,建议设置VirtualizingStackPanel.VirtualizationMode = Standard
几乎就像问题源于 VirtualizingStackPanel.VirtualizationMode 但我将此属性设置为标准并回收并且没有运气。
这是定义:
默认情况下,VirtualizingStackPanel 为每个可见项目创建一个项目容器,并在不再需要它时将其丢弃(例如当项目滚动到视图之外时)。当 ItemsControl 包含大量项目时,创建和丢弃项目容器的过程会对性能产生负面影响。当 VirtualizingStackPanel.VirtualizationMode 设置为 Recycling 时,VirtualizingStackPanel 会重复使用项目容器,而不是每次都创建一个新容器。
在初始加载时,如果单元格不可见,我无法获取单元格内容(除非它是第一条记录/行)。一旦单元格/列可见,则信息可用。