Как найти видимые строки DataGrid в Silverlight? - PullRequest
2 голосов
/ 22 февраля 2011

Как найти видимые строки DataGrid в Silverlight?

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Я не уверен, что вы подразумеваете под Visible DataGridRow s, но вы можете получить все DataGridRow s, которые генерируются в данный момент, найдя их в дереве визуалов. Это в основном даст вам все Visible DataGridRow s и, возможно, еще несколько из-за виртуализации, используемой в DataGrid

Пример

private List<DataGridRow> GetDataGridRows(DataGrid dataGrid)
{
    return GetVisualChildCollection<DataGridRow>(c_dataGrid);            
}

GetVisualChildCollection

public static List<T> GetVisualChildCollection<T>(object parent) where T : FrameworkElement
{
    List<T> visualCollection = new List<T>();
    GetVisualChildCollection(parent as DependencyObject, visualCollection);
    return visualCollection;
}
private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : FrameworkElement
{
    int count = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < count; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(parent, i);
        if (child is T)
        {
            visualCollection.Add(child as T);
        }
        else if (child != null)
        {
            GetVisualChildCollection(child, visualCollection);
        }
    }
}
0 голосов
/ 30 мая 2012

Я сделал это, подключившись к событиям DataGrid LoadingRow и UnloadingRow .

Вот пример

    HashSet<DataGridRow> loadedRows

    private void HandleUnloadingRow(object sender, DataGridRowEventArgs e)
    {
        _loadedRows.Remove(e.Row);
    }

    private void HandleLoadingRow(object sender, DataGridRowEventArgs e)
    {
        _loadedRows.Add(e.Row);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...