私は、コマンドをWPFのメニューアイテムにバインドしようとしています。私は他のすべてのコマンドバインディングのために働いていたのと同じ方法を使用していますが、ここではうまくいかない理由がわかりません。コンテキストメニューへのMVVMバインディングコマンド
私は現在、このように私のコマンドを結合しています:
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MyCommand}"
それがうまくいかないところです(これはユーザーコントロールの内部にある)
<Button Height="40" Margin="0,2,0,0" CommandParameter="{Binding Name}"
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ConnectCommand}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" CommandParameter="{Binding Name}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.RemoveCommand}"/>
</ContextMenu>
</Button.ContextMenu>
...
それが必要のような最初のコマンドバインディングの作品は、 2人目は何もしません。 祖先のレベルを変更し、RelativeSourceの代わりにElementNameを使用してアクセスするようにコントロールを命名しようとしましたが、変更はありません。それは "参照とのバインディングのソースを見つけることができません..."と続きます
私は何が欠けていますか?あなたはこれを言及しているので
私がチェックする必要があると思いますが、技術的にそれはだから、それがユーザーコントロールを見つけることができませんので、MenuItemには、別の木であってもよく、祖先ではない(スヌープは私がこの権利を覚えているかどうかを確認することができた)。他のコマンドバインディング(Buttonコントロールのコマンドなど)では、なぜCommand = "{Binding Path = ConnectCommand}"を実行できませんか? ButtonはUserControlからDataContextを継承する必要があるため、RelativeSource/FindAncestorの構文全体を必要としません。 – MetalMikester