1

私はこのようなxamlを持っています

<Grid>
<Grid.DataContext>
    <bin:ItemsCollViewModel/>
</Grid.DataContext>
<controls:Pivot ItemsSource="{Binding Items}">
    <controls:Pivot.HeaderTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding ItemName}" />                            
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu >
                        <toolkit:ContextMenu.Items>                                        
                            <toolkit:MenuItem Header="Remove" />
                        </toolkit:ContextMenu.Items>
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
            </Grid>
        </DataTemplate>
    </controls:Pivot.HeaderTemplate>
    <controls:Pivot.ItemTemplate>
        ....
    </controls:Pivot.ItemTemplate>
</controls:Pivot>

コンテキスト メニュー項目のコマンド プロパティをビューモデル ( ItemsCollViewModel )の ICommand プロパティ (TryRemove と言う) にバインドする必要があります。このTryRemoveはItemsCollViewModelに属していますが、その親 (ピボット) の DataContext はItemsCollViewModelのプロパティであるItemsです。では、このコンテキスト メニュー項目のコマンド プロパティをその親 (ピボット) の親 (グリッド) のプロパティにバインドするにはどうすればよいでしょうか。

要するに、コントロールの親の親のデータコンテキストにアクセスするにはどうすればよいですか。ボタンの DataContext を親の親 DataContext に変更する方法は? しかし、コンパイラはAncestorType={x:Type Grid}を見つけることができません

4

2 に答える 2

0

決して遅くならないよりも良いという精神で:

Name プロパティを Pivot コントロールに追加し、次の操作を行います。 {Binding DataContext.TryRemove, ElementName=MyPivot}

于 2013-03-11T19:53:02.673 に答える
0
<ContextMenu>
                <MenuItem Command="{Binding DatContext.TryRemove,  RelativeSource={RelativeSource AncestorType={x:Type Grid},AncestorLevel=1}  }"/>
            </ContextMenu>

AncestorLevel も試してみてください。これが役立つことを願っています。

于 2012-07-16T14:54:14.150 に答える