2012-01-29 55 views
0

我有一个Datagrid,它使用DataTable中的值填充。在我的程序中,我有四个按钮:转到第一个,最后一个,下一个和上一个,因为名称表示我必须根据使用这些按钮所做的选择来选择行。一切似乎都很好,如果我使用下面的代码来获取行(例如第一行)。按钮上的Datagrid行选择单击WPF

DataGridRow row =(DataGridRow)userControl.m_DataGrid.ItemContainerGenerator.ContainerFromIndex(0); 
row.IsSelected = true; 

但是,当存在比Datagrid的高度更多的行时(滚动条进入图片时),代码会抛出空值。

请帮我解决这个问题。我认为这是因为观点问题。

回答

0

由于虚拟化的原因,容器只能在对象处于视图中时才创建,因此您可以先使用respective method将项目滚动到视图中,然后等待创建容器并将其选中。

由于这相当混乱,我建议使用DataGridRow(将其设置为ItemContainerStyle)的样式将IsSelected绑定到物品上。然后,您可以将该属性设置为true,并根据需要将该项目滚动到视图中。

+0

我试过第一种方法(ScrollIntoView),所以我可以移动到第一个和最后一个位置,但行的选择仍然不可能,因为它给出了空值。只有第一排其行为良好。 ** CustomerGrid.ScrollIntoView(CustomerGrid.Items [0]); DataGridRow row =(DataGridRow)CustomerGrid.ItemContainerGenerator.ContainerFromIndex(0); row.IsSelect = true; row.Focus(); ** – Kris 2012-01-29 19:12:49

+0

@Kris:我说你需要**等待容器被创建**,你不能在同一个方法中做到这一点,网格甚至不会在那一点滚动这是由UI线程在空闲时完成的。我不会试图做到这一点,这是一个皇家的痛苦。 – 2012-01-29 19:17:10