0
나는이 TreeView 컨트롤이초점 TreeViewItem
public class ModelView
{
public TreeViewModelView TvMview { get; set; } = new TreeViewModelView();
}
public class TreeViewModelView
{
public ObservableCollection<FirstNode> FirstNodes { get; set; } = new ObservableCollection<FirstNode>();
}
public class FirstNode : TreeItem
{
public ObservableCollection<SecondNode> SecondNodes { get; set; } = new ObservableCollection<SecondNode>();
public string HeaderText { get; set; }
}
public class SecondNode : TreeItem
{
public ObservableCollection<ThirdNode> ThirdNodes { get; set; } = new ObservableCollection<ThirdNode>();
public string HeaderText { get; set; }
}
public class ThirdNode
{
public string HeaderText { get; set; }
}
public class TreeItem
{
public bool IsExpanded { get; set; }
public bool IsSelected { get; set; }
}
을 그리고 예상대로 모든 노력하고 있습니다. 하지만 ... 나는 seach를 구현하고 싶다 :
foreach (var firstNode in Mview.TvMview.FirstNodes)
{
if (firstNode.HeaderText.Contains(textBox.Text))
{
firstNode.IsExpanded = true;
firstNode.IsSelected = true;
TreeViewItem tvItem = (TreeViewItem)treeView.ItemContainerGenerator.ContainerFromItem(firstNode);
tvItem?.Focus();
return;
}
}
올바른 노드가 확장되었지만 tvItem은 항상 null이다. 나는 언젠가 ContainerFromItem이 가상화를 좋아하지 않는다고 언젠가 읽었다. ...
어떤 생각?
감사합니다.
ContainerFromItem이 작동하지 않습니다. TreeView에 VirtualizingPanel.IsVirtualizing = "False"를 추가하십시오. 귀하의 뷰 모델이 맞습니까? INotifyPropertyChanged를 구현 했습니까? – user2880486
INotifyPropertyChanged는 TreeItem 기본 클래스에서 구현됩니다. 그리고 확실히 ... 가상화를 제거하면 문제가 해결되지만, 요점은 ... 예를 들어 virutalization없이 TreeView에 30,000 개의 항목을 추가하면 180 초가 걸립니다. 가상화 : 1 초. –