我有TreeView
我绑定到我的数据类列表。实际上,我正在使用 JSON 数据并从中创建列表。另外,我定义 a DataTemplate
inTreeView
来保存一个Image
and TextBlock
in StackPanel
。但是当我运行项目时,它只显示我需要的文本,而不是图像。然后我用声明/定义将DataTemplate
from转移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
hasIconImage
和Header
命名的公共属性,我相信当我转移DataTemplate
到TreeView.ItemTemplate
即使那样时它也没有正确绑定,而只是将名称显示为我的DataStructure
has Header
,这与TreeViewItem's
Header 对象相同。
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>
在后面的代码中,我只是这样做
treeView_Expand(sender, e) {
...
t.ItemsSource = ds;
}
我只是调用 JSON 字符串,在其上运行 foreach,做一些数学运算并创建列表,然后将 (ds) 分配给 ItemsSource。
按需编辑
public class TVDataStructure
{
public string Header;
public object Tag;
public ImageSource IconImage;
public bool DoEvent = false;
public override string ToString()
{
return Header;
}
}
谢谢你的帮助。