0

我正在尝试将 DataGrid 的 itemssource 绑定到 TreeView。我有一个转换器,可以将 TreeView 中显示的项目展平为列表。

我正在尝试编写一个treegridview,其想法是将一个TreeView 和一个DataGrid 彼此相邻放置,以便DataGrid 显示当前在TreeView 中可见的行。就像在这个问题中一样。

看起来转换器工作正常,但我的问题是如何触发绑定更新。我尝试了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