2

ListBox追加したがありContextMenuます。内の項目の 1 つをContextMenuコマンドにバインドし、そのコマンドに渡されるパラメーターをListBoxコントロールの現在選択されている項目にしたいと考えています。これが私のxamlです:

<ListBox x:Name="selectedVascularBeds"             
         ItemsSource="{Binding Path=UserSelectedVascularBeds}"                    
         dd:DragDrop.IsDropTarget="True"
         dd:DragDrop.DropHandler="{Binding}"            
         DisplayMemberPath="VascularBedName">
    <ListBox.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}"
                      CommandParameter="{Binding RelativeSource={RelativeSource 
                                         Mode=FindAncestor,
                                         AncestorType={x:Type ListBox}},
                                         Path=SelectedItem}"/>
        </ContextMenu>
    </ListBox.ContextMenu>
</ListBox>                      

これListBoxは、ビュー モデル オブジェクトにバインドされたユーザー コントロールの一部です。基になるオブジェクトのコマンド メソッドが呼び出されますが、渡されるパラメーターは常に null です。

CommandParameterto のバインドを単純に変更してテストした{Binding}ところ、ユーザー コントロールのデータ コンテキストがメソッドに渡されました。その結果、コマンドが機能し、パラメーターが正しく渡されていることがわかりました。ListBoxSelectedItemプロパティにアクセスするための正しいバインディングを取得できないようです。

ヘルプ?

4

2 に答える 2

3

コンテキスト メニューはリスト ボックスの子孫ではありません。代わりに要素名バインディングを試してください

<MenuItem Header="Remove" Command="{Binding Path=RemoveSelectedVascularBedCommand}" CommandParameter="{Binding ElementName=selectedVascularBeds, Path=SelectedItem}"/>
于 2009-12-01T00:18:12.843 に答える
1

ElementName バインディングも機能せず、パラメーターはまだ null のままで、コンソール出力にエラーが見つかりました。

System.Windows.Data エラー: 4 : 参照 'ElementName=selectedVascularBeds' を含むバインドのソースが見つかりません。BindingExpression:Path=DataContext; DataItem=null; ターゲット要素は 'MenuItem' (Name='') です。ターゲット プロパティは 'CommandParameter' (タイプ 'Object') です。

そのエラーを検索すると、このリンクにたどり着きますが、コンテキストメニューが異なるようで、私が望んでいることを達成できません。

ContextMenu の MenuItem からの ElementName バインディング

于 2009-12-01T17:34:39.780 に答える