我正在尝试将 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();
}
}