새로 생성 된 항목에 TreeViewItem을 가져옵니다
-
28-09-2020 - |
문제
"ChildItem"을 얻는 데 다음은 더 나은 방법이어야합니다
TaskItem task = (sender as Canvas).DataContext as TaskItem;
TaskItem child = Tasks.CreateTask("New task", task);
TreeViewItem item = treeView.ItemContainerGenerator.ContainerFromItem(task) as TreeViewItem;
item.UpdateLayout();
TreeViewItem childItem = null;
foreach (var i in item.GetDescendantContainers())
{
if (i.GetItem() == child)
childItem = i;
}
.
어떤 이유로 item.ItemGenerator.ContainerFromItem (하위)가 작동하지 않습니다 (방금 생성 된 항목으로 인해 켜져 있어야 함)
해결책
항목 컨테이너 생성은 비동기식이므로 항목이 추가되는 즉시 컨테이너가 존재할 수 없습니다. ItemContainergenerator에 핸들러를 첨부해야합니다.StatusChanged 이벤트가 있으므로 컨테이너 생성이 완료되면 코드가 알려줍니다.
DR.WPF의 블로그 항목 itemscontrol : 'g'는발전기 " 문제에 대한 좋은 설명을 가지며 상태를 사용하는 예제를 제공합니다.
private void AddScooby()
{
_scooby = new Character("Scooby Doo");
Characters.Add(_scooby);
CharacterListBox.ItemContainerGenerator.StatusChanged
+= OnStatusChanged;
}
private void OnStatusChanged(object sender, EventArgs e)
{
if (CharacterListBox.ItemContainerGenerator.Status
== GeneratorStatus.ContainersGenerated)
{
CharacterListBox.ItemContainerGenerator.StatusChanged
-= OnStatusChanged;
ListBoxItem lbi = CharacterListBox.ItemContainerGenerator
.ContainerFromItem(_scooby) as ListBoxItem;
if (lbi != null)
{
lbi.IsSelected = true;
}
}
}
. 제휴하지 않습니다 StackOverflow