将ObservableCollection <myclass>绑定到TreeView

时间:2016-03-03 20:24:10

标签: .net wpf xaml treeview

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

自定义ErrorDetails类如下所示:

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中的绑定表示怀疑。无论如何,我尝试了多种组合但没有出现任何组合。

请指导。

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

2 个答案:

答案 0 :(得分:0)

  <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>

enter image description here

答案 1 :(得分:0)

虽然赵静波的答案很明显,但我意识到我遗漏的一个基本事情是在ErrorDetail类中拥有属性,而不仅仅是公共字段。

没有意识到WPF对要求属性如此严格。