代码之家  ›  专栏  ›  技术社区  ›  Nikhil Vartak

如何在XAML中获取父列表框项的引用?

  •  0
  • Nikhil Vartak  · 技术社区  · 6 年前
    <Window> <!-- DataContext="HomeViewModel" -->
        <ListBox ItemsSource="{Binding Discs}"> <!-- HomeViewModel.ObservableCollection<DiscViewModel> -->
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TreeView ItemsSource="{Binding Folders}"> <!-- DiscViewModel.IList<Folder> -->
                        <TreeView.ItemTemplate>
                            <DataTemplate>
                                <cc:TreeViewItemEx Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.GetFilesCommand}"/>
                            </DataTemplate>
                        </TreeView.ItemTemplate>
                    </TreeView>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Window>
    

    我想执行 GetFilesCommand (定义人 DiscViewModel Folder 是扩展的。为此我延长了 TreeViewItem 具有 Command 作为 DependencyProperty OnExpanded (已覆盖)。这很管用但是 命令

    (HashCode=22799085)'。 装订xpression:Path=DataContext.getfiles命令;DataItem='ListBox' (名称=“”);目标元素为“TreeViewItemEx”(名称=“”);目标

    我理解错误,但不知道如何修复XAML,以便它从中选择命令 DiscViewModel公司 绑定到当前列表项?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Nikhil Vartak    6 年前

    改变

    AncestorType={x:Type ListBox}}
    

    AncestorType={x:Type ListBoxItem}}
    

    用以前的代码,它就恢复了 ListBox DataContext 因此抱怨命令在 HomeViewModel 数据上下文 列表框 .

    选择不删除这个问题,因为我相信将来有人可能会碰到类似的问题。