繁体   English   中英

Datagrid按需卸载

[英]Datagrid on demand load off

我有一个带有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上一样,但我将此属性设置为standard并进行了回收,没有运气。

定义如下:

默认情况下,VirtualizingStackPanel为每个可见项目创建一个项目容器,并在不再需要它时(例如,当项目滚动到视图外时)将其丢弃。 当ItemsControl包含很多项目时,创建和丢弃项目容器的过程可能会对性能产生负面影响。 当VirtualizingStackPanel.VirtualizationMode设置为Recycling时,VirtualizingStackPanel会重用项目容器,而不是每次都创建一个新容器。

初始加载时,如果看不到该单元格,则无法获取该单元格的内容(除非它是第一个记录/行)。 在单元格/列可见之后,该信息可用。

我认为您应该直接处理该行绑定到的数据,而不要将数据从控件中拉出。 这是有道理的,因为它是两种方式的数据绑定,所以在您更改数据时会更新数据(假设它实现了INotifyPropertyChanged接口)。

一个示例是将数据网格绑定到类型MyEntity的集合。

     private void DataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.DataGrid1.SelectedItem == null)
                return;

            MyEntity myEntity = (MyEntity)this.DataGrid1.SelectedItem;

            // at this point you have the (updated) data the row is bound to.
           MessageBox.Show("You Selected: " + myEntity.name);
           ...

另一个示例是每行上都有一个按钮。 单击按钮时要处理的代码如下所示:

      private void btnProcessEntity_Click(object sender, RoutedEventArgs e)
      {

         Button btn = sender as Button;
         MyEntity myEntity = btn.DataContext as MyEntity;

          // clicking a button in a row doesn't select the row, so select it.
         this.DataGrid1.SelectedItem = myEntity;  
         MessageBox.Show("Will Process: " + myEntity.name);

          ...
       }

如果您不熟悉Silverlight通常使用的某些技术,请查看这些视频教程 它是VB.Net,但是代码实际上并不是重点-它专注于Silverlight应用程序体系结构。 我将从“ SL4和WCF Ria服务简介”开始,然后在MVVM上查看其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM