C#/C# WPF 실무
[C# WPF] TreeView 새로고침 시 확장 상태 불러오기
냠냠쿠
2023. 10. 5. 16:37
728x90
private void RefreshTree(TreeView treeView, TreeViewItem selecteditem)
{
//펼쳐져있던 노드 위치 저장
List<string> expandedItems = viewModel.SaveAllNodes(treeView, selecteditem);
...
treeView.Items.Clear();
QueryTreeViewModel.QueryTreeView(path, null, treeView);
...
//앞전 펼쳐져있던 노드 그대로 다시 열어줌
viewModel.TraverseAndExpandTree(treeView.Items, expandedItems);
}
//노드 확장 상태 저장
public List<string> SaveAllNodes(TreeView treeView, TreeViewItem selecteditem)
{
List<string> expandedItems = new List<string>();
TraverseTreeView(treeView, treeView.Items, expandedItems);
return expandedItems;
}
//저장된 노드 확장상태를 통해 다시 펼치기
private void TraverseTreeView(TreeView treeView, ItemCollection items, List<string> expandedItems)
{
foreach (var item in items)
{
TreeViewItem treeItem = item as TreeViewItem;
if (treeItem != null && treeItem.IsExpanded) expandedItems.Add(treeItem.Header.ToString());
// 하위 노드가 있는 경우 재귀함수 호출
if (treeItem != null && treeItem.HasItems) TraverseTreeView(treeView, treeItem.Items, expandedItems);
}
}
//저장된 노드 확장상태를 통해 다시 펼치기
public void TraverseAndExpandTree(ItemCollection items, List<string> expandedItems)
{
foreach (var item in items)
{
TreeViewItem treeItem = item as TreeViewItem;
if (treeItem != null && expandedItems.Contains(treeItem.Header.ToString())) treeItem.IsExpanded = true;
// 하위 노드가 있는 경우 재귀함수 호출
if (treeItem != null && treeItem.HasItems) TraverseAndExpandTree(treeItem.Items, expandedItems);
}
}
728x90