将 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 对属性的要求如此严格。
我正在尝试将自定义类型的 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 对属性的要求如此严格。