0

DataGrid の itemssource を TreeView にバインドしようとしています。TreeView に表示されるアイテムをリストにフラット化するコンバーターがあります。

私はtreegridviewを書き込もうとしています.DataGridがTreeViewに現在表示されている行を表示するように、TreeViewとDataGridを隣り合わせに配置するという考えです。この質問のように。

コンバーターは正常に動作しているように見えますが、私の問題はバインディングをトリガーして更新する方法です。イベントと折りたたまれたイベントを試しましたTreeViewItem.Expanded="UpdateDataGrid"が、コンテナーが生成される前に発生するため、ノードが初めて展開されたときに機能しません。

これにはどのようなイベントが適していますか?

誰かが興味を持っている場合のコンバーターのコード:

class TreeViewChildrenConverter :IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var treeView = (TreeView) value;
        var allItemContainers = GetAllItemContainers(treeView);
        return allItemContainers.Select(x => x.DataContext);
    }
    private IEnumerable<TreeViewItem> GetAllItemContainers(ItemsControl itemsControl)
    {
        for (int i = 0; i < itemsControl.Items.Count; i++)
        {
            var containerFromIndex = itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
            var childItemContainer = containerFromIndex as TreeViewItem;
            if (childItemContainer != null)
            {

                yield return childItemContainer;
                if (childItemContainer.IsExpanded)
                {
                    foreach (var treeViewItem in GetAllItemContainers(childItemContainer))
                    {
                        yield return treeViewItem;
                    }
                }
            }
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
4

0 に答える 0