将 ObservableCollection<MyClass> 绑定到 TreeView

Binding ObservableCollection<MyClass> to TreeView

我正在尝试将自定义类型的 ObservableCollection 绑定到 TreeView。

自定义错误详细信息 class 如下所示:

class ErrorDetail
{
    public string Error;
    public List<String> FilesList;
}

在我的 ViewModel 中,我使用以下 linq 查询填充集合。 errorCollection 是 DataContext 的一部分。

var results = (from p in Transactions
    group p.FileName by p.Error.ToString()
    into g
    select new ErrorDetail() {Error = g.Key, FilesList = g.ToList()}).ToList();

errorCollection = new ObservableCollection<ErrorDetail>(results);

在 TreeView 上,我想将每个错误及其关联文件显示为其子节点。

下面是我的XAML

<Grid Name="ErrorView" Margin="10">
    <TreeView ItemsSource="{Binding Path=ErrorModel.ErrorDetails}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=FilesList}">
                <TextBlock Foreground="Red" Text="{Binding Path=Error}" />
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=FilesList}" />
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</Grid>

我对第二个 TextBlock 中的 Binding 表示怀疑。无论如何,我尝试了多种组合,但没有任何结果。

请指导。

编辑:向最终结果添加更多内容,集合正确填充但 TreeView 上未显示任何内容。

  <TreeView ItemsSource="{Binding  ErrorList}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=FilesList}">
                <TextBlock Foreground="Red"
                           Text="{Binding Path=Error}" />
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}" />
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

虽然 zhaojingbo 的回答是正确的,但我意识到我缺少的一件基本事情是在 ErrorDetail class 中拥有属性,而不仅仅是 public 个字段。

没想到 WPF 对属性的要求如此严格。