绑定到WPF Treeview模板项

时间:2011-04-16 23:17:05

标签: wpf xaml .net-4.0 binding

我有一个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> IconDescription 。我正试图绑定它们,如下所示:

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

2 个答案:

答案 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”和“@”。