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
'C# > C# WPF 실무' 카테고리의 다른 글
[C# WPF] 정규식을 이용하여 string에 특수문자 있는지 판단하기 (0) | 2023.10.10 |
---|---|
[C# WPF] 윈도우 스타일(WindowStyle) None 상태에서 창 그림자 설정하기 (0) | 2023.10.06 |
[C# WPF] Grid를 드래그해서 크기 조정할 수 있도록 설정하는 법 (0) | 2023.10.05 |
[C# WPF] 디렉터리(폴더) 혹은 파일 이름이 존재하는지 확인 (1) | 2023.10.05 |
[C# WPF] TextBox에 엔터(enter) 허용하기 (0) | 2023.10.04 |