新しく作成されたアイテムの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(子)が機能しません(登録されたアイテムが作成されたために行われる必要があります)
解決
項目コンテナの生成は非同期であるため、アイテムが追加されるとすぐにコンテナが存在するとは思えません。 itemContainergenerRer"> itemContainergenerAder.jp.StatusChanged イベントでは、コンテナの生成が完了したときにコードが通知されます。
博士。WPFのブログエントリ "ItemsControl: 'G'はGenerator "は問題の良い説明を持ち、StatusChangedを使用する例を提供します。
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