我有一个TreeView,其数据上下文是使用
设置的 LayoutRoot.DataContext = value
来自代码隐藏。
CommandTreeViewModel
的{{1}}属性为Commands
IEnumerable(Of CommandViewModel)
又有多个CommandViewModel
在我的XAML中,我使用以下XAML将其转换为树项目
CommandViewModel
现在我在其他地方有一个图像和两个文本块,我想绑定到所选树视图项的原始数据源上的元素 - 具体来说, <TreeView ItemsSource="{Binding}"
DataContext="{Binding FirstGeneration}"
x:Name="CommandTreeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Border BorderThickness="1"
Width="200"
Margin="2"
CornerRadius="10,0,10,0">
<StackPanel Orientation="Horizontal"
<Image Source="{Binding Icon}"
Width="24"
Height="24" />
<TextBlock VerticalAlignment="Center"
FontSize="13"
Margin="10,0,0,0"
Text="{Binding Name}"
Foreground="White" />
</StackPanel>
</Border>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
,Icon
,Description
。我正试图绑定它们,如下所示:
Name
与 <StackPanel Orientation="Vertical"
DataContext="{Binding ElementName=CommandTreeView, Path=SelectedItem}">
<Image x:Name="CommandIcon"
Width="64"
Height="64"
Source="{Binding XPath=@Icon}"></Image>
</StackPanel>
的Text属性相同。
当我点击树视图项目时,我在输出窗口中收到以下异常......
TextBlocks
答案 0 :(得分:1)
您的XAML在绑定中使用XPath,仅在绑定到XML文档时使用:
{Binding XPath=@Icon}
请改为尝试:
{Binding Path=Icon}
也可能还有其他事情发生。
答案 1 :(得分:1)
您是否基于某些XML构建CommandViewModel层次结构?因为如果是这种情况,你的CommandViewModel也应该有一个像XmlNode SourceNode
这样的属性链接到相应的XmlNode然后在你的XAML中你应该这样做:
<StackPanel Orientation="Vertical"
DataContext="{Binding ElementName=CommandTreeView, Path=SelectedItem.SourceNode}">
<Image x:Name="CommandIcon"
Width="64"
Height="64"
Source="{Binding XPath=@Icon}"></Image>
</StackPanel>
然后它应该工作。
或者如果您根本不使用XML,请按照StellarEleven的建议 - 从{Binding XPath=@Icon}
中删除“X”和“@”。