簡體   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