无法将模型绑定到TreeView

时间:2013-01-22 12:25:42

标签: c# wpf xaml binding

这是一个日志记录项目,Title提供项目的名称和消息记录每个阶段。因此,每个标题都有许多消息。

为了提出问题,我正在简化我的目标。

我的日志类有2个属性。

List<LogDetails>
string Title

我的LogDetails类有1个属性:

string Message

我无法将Message绑定到我的XAML。标题根据需要绑定。

我的xaml代码:

<Window x:Class="BackUps.Logging.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:myData="clr-namespace:BackUps.Logging"
        Title="MainWindow"
        Height="350"
        Width="525">
  <Grid>
    <TreeView ItemsSource="{Binding}">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type myData:Log}"
                                  ItemsSource="{Binding LogDetailsList}">
          <TextBlock Text="{Binding Title}" />
          <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate DataType="{x:Type myData:LogDetails}">
              <StackPanel>
                <TextBlock Text="{Binding Message}" />
              </StackPanel>
            </DataTemplate>
          </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
      </TreeView.ItemTemplate>
    </TreeView>
  </Grid>

和我的代码

  public MainWindow(List<Log> logs)
    {
        InitializeComponent();
        this.DataContext = logs;
    }

我的结果是(您可以看到缺少的条目):

enter image description here

这是Auto的窗口,显示我正在尝试绑定的对象。

enter image description here

我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:1)

我过去遇到过类似的问题,并通过(完全)将xaml更改为表单来修复它:

<Grid>
  <TreeView ItemsSource="{Binding}">
    <TreeView.Resources>
      <HierarchicalDataTemplate DataType="{x:Type myData:Log}"
                                ItemsSource="{Binding LogDetailsList}">
        <TextBlock Text="{Binding Title}" />
      </HierarchicalDataTemplate>
      <HierarchicalDataTemplate DataType="{x:Type myData:LogDetails}>
                        <TextBlock Text="{Binding Message}" />
      </HierarchicalDataTemplate>
    </TreeView.Resources>
  </TreeView>
</Grid>