WPF TreeView,绑定无法正常工作

时间:2013-05-22 12:10:01

标签: wpf data-binding treeview

我有TreeView我绑定到我的数据类列表。实际上,我正在使用JSON数据并从中创建List。另外,我在DataTemplate中定义TreeView以在Image中保留TextBlockStackPanel。但是当我运行项目时,它只显示我需要的文本,但不显示图像。然后,我使用DataTemplate声明/定义将TreeView.ItemTemplateUserControl.Resources转移到DataType,现在它没有显示任何内容。我开始得到

System.Windows.Data Error: 40 : BindingExpression path error: 'IconImage' property not found on 'object' ''TVDataStructure' (HashCode=32882480)'. BindingExpression:Path=IconImage; DataItem='TVDataStructure' (HashCode=32882480); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource')

TVDataStructure已将IconImageHeader命名为公共属性,我相信当我将DataTemplate转移到TreeView.ItemTemplate时,它仍然无法正常绑定只显示名称,因为我的DataStructureHeader,与TreeViewItem's标题对象相同。

XAML代码

 <UserControl.Resources>
    <DataTemplate x:Name="TVIDataTemplate" DataType="{x:Type sotc:TVDataStructure}" >
        <StackPanel Orientation="Horizontal">
            <Image Name="IconHolder" Source="{Binding Path=IconImage}"/>
            <TextBlock Name="LabelHolder" Text="{Binding Path=Header}"/>
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <TreeView x:Name="tvMain" Height="Auto" Width="Auto" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
</Grid>

在Code Behind中我只是这样做

 treeView_Expand(sender, e) {
   ...
   t.ItemsSource = ds;
 }

我只需调用JSON字符串,在其上运行foreach,进行一些数学运算并创建List然后将(ds)赋值给ItemsSource。

按需编辑

public class TVDataStructure
{
    public string Header;
    public object Tag;
    public ImageSource IconImage;
    public bool DoEvent = false;

    public override string ToString()
    {
        return Header;
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要创建公共字段属性,例如

public string Header { get, set; }

就是这样......

并且,作为辅助信息,文本在您的某个版本中正确显示,因为当没有找到模板时,WPF会自动创建一个TextBlock,其中显示ToString()返回的字符串。

通过再次明确设置树的ItemTemplate来重建代码。