我正在尝试将自定义类型的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上没有显示任何内容。
答案 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>
答案 1 :(得分:0)
虽然赵静波的答案很明显,但我意识到我遗漏的一个基本事情是在ErrorDetail类中拥有属性,而不仅仅是公共字段。
没有意识到WPF对要求属性如此严格。