Get row from index in Silverlight DataGrid

I am trying to implement row reordering in a Silverlight DataGrid. To do this, I am expanding the default value DataGridDragDropTarget, and I need to override and implement the following method:

protected override DataGridRow ContainerFromIndex(DataGrid itemsControl, int index)
{

}

How can I get a DataGridRow from a DataGrid and index?

+3
source share
2 answers

Herzmeister's slight improvement, see comments:

protected override DataGridRow ContainerFromIndex(DataGrid itemsControl, int index)
{
    var rowsPresenter = itemsControl.GetVisualDescendants().OfType<DataGridRowsPresenter>().FirstOrDefault();
    if (rowsPresenter != null)
    {
        return rowsPresenter.Children.OfType<DataGridRow>()
                .Where(row => row.GetIndex() == index).SingleOrDefault();
    }
    return null;
}
+5
source

I have not watched DataGridDragDropTarget, but could not do only

protected override DataGridRow ContainerFromIndex(DataGrid itemsControl, int index)
{
    var row = base.ContainerFromIndex(itemsControl, index);
    if (row != null)
    {
        // do something with row
    }
}

?

If this is not implemented for any reason, you can try the following:

// requires Assembly System.Windows.Controls.Toolkit.dll

using System.Windows.Controls.Primitives;
// ...

protected override DataGridRow ContainerFromIndex(DataGrid itemsControl, int index)
{
    var rowsPresenter =
        itemsControl.GetVisualDescendants()
            .OfType<DataGridRowsPresenter>().FirstOrDefault();
    if (rowsPresenter != null)
    {
        var row = rowsPresenter.Children[index];
        // do something with row
    }
}

, . , .

+3

Source: https://habr.com/ru/post/1770844/


All Articles