1

私は次のコードを持っています。Commandのプロパティを、ユーザーコントロールのにMenuItem実装されている関連コマンドにバインドしようとしています。DataContext誰か助けてもらえますか?コマンドは実行されません。

<UserControl x:Class="MIB2.App.Presentations.Views.CategoryManView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:model="clr-namespace:MIB2.Models;assembly=MIB2"
             xmlns:local="clr-namespace:MIB2.App.Presentations.Views"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="335">
    <UserControl.Resources>
        <local:DatabindingDebugConverter x:Key="debugConverter" />
    </UserControl.Resources>

    <StackPanel Width="417">
        <TreeView   x:Name="tree"
                    ItemsSource="{Binding RootCategories}" SelectedItemChanged="TreeView_SelectedItemChanged"
                    MouseRightButtonDown="OnPreviewMouseRightButtonDown">
            <TreeView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Add Root Category" Command="{Binding AddRootCategoryCommand}"/>
                </ContextMenu>
            </TreeView.ContextMenu>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate   DataType="model:Item"
                                            ItemsSource="{Binding Children}">
                    <Grid>
                        <Grid.ContextMenu>
                            <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=TextBox}}">
                                <MenuItem Header="Add Category" Command="{Binding Path=AddEntityCommand}" />
                            </ContextMenu>
                        </Grid.ContextMenu>

                        <TextBlock Text="{Binding Description}" Margin="0,0,10,0" Tag="{Binding DataContext, ElementName=tree}"/>
                    </Grid>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
        <StackPanel Orientation="Horizontal">
            <Button Content="Add New Category" Command="{Binding AddEntityCommand}" />
            <Button Content="Add New Root Category" Command="{Binding AddRootCategoryCommand}" />
            <Button Content="Delete Category" Command="{Binding DeleteEntityCommand}" />
        </StackPanel>
        <ContentControl Content="{Binding EntityViewModel.View}" />
    </StackPanel>
</UserControl>
4

2 に答える 2

5

これを試してください:

<TreeView.ItemTemplate>
    <HierarchicalDataTemplate DataType="model:Item"
                              ItemsSource="{Binding Children}">
        <Grid Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}">
            <Grid.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Add Category"
                              Command="{Binding Path=PlacementTarget.Tag.AddEntityCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
                </ContextMenu>
            </Grid.ContextMenu>
            <TextBlock Text="{Binding Description}" Margin="0,0,10,0" />
        </Grid>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>
于 2012-06-26T23:00:56.393 に答える
0

バインディングでRelativeSourceを使用して、親オブジェクトを検索できます。

<MenuItem Header="Add Root Category" Command="{Binding DataContext.CommandName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}/> 
于 2012-06-26T07:16:47.023 に答える