1

文字列のリストからのItemSourceを持つListViewがあります。ここで、いくつかのコマンドを実装するだけのコンテキストメニューを追加しました。しかし、問題はDataContextをどのように設定するかです。いくつかの解決策を見つけましたが、どれも私にはうまくいきませんでした。私のせいがどこにあるのかわからない。

ここで私のXAMLコードを重要な領域に縮小しました。

    <ListView x:Name="lstBackups" ItemsSource="{Binding SelectedClient.Backups}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="ContextMenu">
                    <Setter.Value>
                        <ContextMenu>
                            <MenuItem Header="Do Something"                                           DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                                      cinch:SingleEventCommand.RoutedEventName="MouseLeftButtonUp"
                                      cinch:SingleEventCommand.TheCommandToRun="{Binding Path=DataContext.OpenBackupInExplorerCommand, ElementName=UserControl}">
                            </MenuItem>
                        </ContextMenu>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
4

1 に答える 1

2

ContextMenuがユーザーコントロールと同じビジュアルツリーの一部ではないことに気付いたと思います(私が知っているのは面倒です)。したがって、バインディングロジックを少し工夫する必要があります。

コマンドバインディングを次のように変更してみてください

cinch:SingleEventCommand.TheCommandToRun="{BindingPath=PlacementTarget.DataContext.OpenBackupInExplorerCommand, 
                                           RelativeSource={RelativeSource FindAncestor, 
                                                                          AncestorType={x:Type ContextMenu}}}"

これにより、UserControlのDataContextを継承する配置ターゲット(この場合はListView)のDataContextを取得しようとします。

うまくいけば、それはうまくいくでしょう。

于 2012-12-27T20:58:25.137 に答える