Получить строку из индекса в Silverlight DataGrid - PullRequest
3 голосов
/ 22 октября 2010

Я пытаюсь реализовать переупорядочение строк в сетке данных Silverlight. Для этого я расширяю значение по умолчанию DataGridDragDropTarget, и мне нужно переопределить и реализовать следующий метод:

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

}

Как я могу получить DataGridRow из DataGrid и индекса?

Ответы [ 2 ]

5 голосов
/ 01 ноября 2010

Небольшое улучшение ответа Герцмейстера, см. Комментарии:

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;
}
3 голосов
/ 29 октября 2010

Я еще не посмотрел на DataGridDragDropTarget, но вы не могли бы просто

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

?

Если это не реализовано по какой-либо причине, вы можете попробоватьэто:

// 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
    }
}

Я не знаю, однако, как вы хотите осуществить переупорядочение строк.Скорее всего, вы должны сами отслеживать свои индексы и возвращать одно из ваших собственных сохраненных значений индекса в этом методе.

...