我有TreeView
我绑定到我的数据类列表。实际上,我正在使用JSON数据并从中创建List。另外,我在DataTemplate
中定义TreeView
以在Image
中保留TextBlock
和StackPanel
。但是当我运行项目时,它只显示我需要的文本,但不显示图像。然后,我使用DataTemplate
声明/定义将TreeView.ItemTemplate
从UserControl.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
已将IconImage
和Header
命名为公共属性,我相信当我将DataTemplate
转移到TreeView.ItemTemplate
时,它仍然无法正常绑定只显示名称,因为我的DataStructure
有Header
,与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;
}
}
感谢您的帮助。
答案 0 :(得分:1)
您需要创建公共字段属性,例如
public string Header { get, set; }
就是这样......
并且,作为辅助信息,文本在您的某个版本中正确显示,因为当没有找到模板时,WPF会自动创建一个TextBlock,其中显示ToString()
返回的字符串。
通过再次明确设置树的ItemTemplate
来重建代码。