【问题标题】:Datagrid Row Selection On Button Click In WPF在WPF中单击按钮上的Datagrid行选择
【发布时间】:2012-01-29 18:01:40
【问题描述】:

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

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

但是当行数超过数据网格的高度时(当滚动条进入图片时),代码会抛出空值。

请帮我解决这个问题。我认为这是因为视图问题。

【问题讨论】:

    标签: wpf datagrid row


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试了第一种方法(ScrollIntoView),所以我可以移动到第一个和最后一个位置,但是仍然无法选择行,因为它给出了空值。仅对于第一行,其表现良好。 CustomerGrid.ScrollIntoView(CustomerGrid.Items[0]); DataGridRow 行 = (DataGridRow)CustomerGrid.ItemContainerGenerator.ContainerFromIndex(0);行.IsSelected = true; row.Focus();
    • @Kris:我说你需要等待容器被创建,你不能用同样的方法做到这一点,此时网格甚至不会滚动因为这是由 UI 线程在空闲时完成的。我不会尝试这样做,这是一种皇家的痛苦。
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2011-04-19
    • 2020-08-22
    • 2018-11-27
    相关资源
    最近更新 更多