繁体   English   中英

如何从TreeView内的contextmenu绑定到基本ViewModel?

[英]How to get bind to base viewmodel from contextmenu inside treeview?

我无法在contextMenu中将选择绑定到命令EditCommand。 我在树状视图中的按钮绑定到它很好,但是在菜单中它失败了。 我已经读过这很可能是由于contextMenu位于不同的UI树中,但是使用findAncestor和标签的解决方案对我来说不起作用。 无论如何有绑定并且仍然能够将treeViewItem传递给方法吗?

我的XAML:

<TreeView Background="Transparent"
          Margin="10"
          Grid.Column="0" Grid.Row="1"
          ItemsSource="{Binding Path=TreeViewItems}">
    <TreeView.ItemTemplate >
        <HierarchicalDataTemplate DataType="{x:Type model:TreeViewSelection}" ItemsSource="{Binding Configs}" >
            <DockPanel HorizontalAlignment="Stretch" Background="Transparent"><!--Transparency allows context click on whole row-->
                <DockPanel.ContextMenu>
                    <ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
                        <MenuItem 
                            Header="Edit"
                            Command="{Binding ElementName=userControl, Path=DataContext.EditCommand}"<!--Doesn't work-->
                            CommandParameter="{Binding}">
                            <MenuItem.Icon>
                                <Image Source="../Images/edit.png" />
                            </MenuItem.Icon>
                        </MenuItem>
                    </ContextMenu>
                </DockPanel.ContextMenu>
                <TextBlock DockPanel.Dock="Left" Text="{Binding Title}" />
                <StackPanel DockPanel.Dock="Right"
                            Orientation="Horizontal"
                            HorizontalAlignment="Right">
                    <Button Height="23" Width="23"
                        Command="{Binding ElementName=userControl, Path=DataContext.EditCommand}"<!--Works-->
                        CommandParameter="{Binding}"
                        Style="{DynamicResource ImageNoTextButton}"
                        inf:AttachedProperties.Image="../Images/edit.png"
                        inf:AttachedProperties.ImageMouseOver="../Images/editMouseOver.png" />
                </StackPanel>
            </DockPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>

</TreeView>

尝试这个:

<DockPanel HorizontalAlignment="Stretch" Background="Transparent"
           Tag="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}">
    <DockPanel.ContextMenu>
        <ContextMenu>
            <MenuItem 
                Header="Edit"
                Command="{Binding Path=PlacementTarget.Tag.DataContext.EditCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                CommandParameter="{Binding}">
                <MenuItem.Icon>
                    <Image Source="../Images/edit.png" />
                </MenuItem.Icon>
            </MenuItem>
        </ContextMenu>
    </DockPanel.ContextMenu>
    ...
</DockPanel>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM