2011-02-22 4 views

답변

1

Visible DataGridRow의 의미가 확실하지 않지만 시각적 트리에서 찾은 순간 모든 DataGridRow이 생성 될 수 있습니다. 이것은 기본적으로 당신 때문에 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

visible = "현재 순간의 화면에 표시" – user626528

0

나 '방법에 사용되는 가상화의 모든 눈에 보이는 DataGridRow의 그리고 아마도 몇을 줄 것이다 DataGrid의 LoadingRowUnloadingRow 이벤트에 연결하는 것입니다.

여기

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); 
    } 
관련 문제