1

私は WPF アプリケーションに取り組んでおり、MVVM パターンを使用しています。MVVMLight を使用して、いくつかのイベントを処理しています。どのアイテムがイベントを送信したかを確実に知ることができるように、引数も渡すことができるように、「クリック」イベントを転送する必要があります。「コマンド」を使用すると、イベントを送信したのが選択されたアイテムであったことを確認できません-アイテムを選択して右クリックする必要がないためです。

これは、「注文明細」のリストを表示するための私のコードです。注文明細行には 2 つのタイプがあり、データ タイプの 1 つです。「AccessoryOrderLine」 - コンテキスト メニューを追加したい。

私の問題は、ウィンドウの DataContext にアクセスできないことです。ウィンドウのルート ノードに「ルート」という名前を付け、ルートの DataContext にアクセスしようとしていますが、次のエラーで失敗します。

System.Windows.Data エラー: 4 : 参照 'ElementName=root' でバインディングのソースが見つかりません。BindingExpression:Path=DataContext.PackAccessory; DataItem=null; ターゲット要素は 'EventToCommand' (HashCode=5903270) です。ターゲット プロパティは 'Command' (タイプ 'ICommand') です。

<ListBox HorizontalContentAlignment="Stretch" Margin="10,0,10,10" DockPanel.Dock="Bottom" Grid.Row="1" ItemsSource="{Binding OrderLines, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
    <ListBox.Resources>
        <DataTemplate DataType="{x:Type m:UnitOrderLine}">
             <v:OrderLine />
        </DataTemplate>
        <DataTemplate DataType="{x:Type m:AccessoryOrderLine}">
            <v:OrderLine>
                <v:OrderLine.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Pack 1" IsCheckable="False">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="Click">
                                    <cmd:EventToCommand Command="{Binding ElementName=root, Path=DataContext.PackAccessory }" PassEventArgsToCommand="True" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                         </MenuItem>
                     </ContextMenu>
                 </v:OrderLine.ContextMenu>
             </v:OrderLine>
         </DataTemplate>
     </ListBox.Resources>
 </ListBox>

「TemplatedParent」も使用しようとしましたが、「OrderLine」DataContext にアクセスできましたが、「MainWindowModel」にさらに一歩戻ることはできません。

http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

私の問題の解決策を見つけました:)

4

3 に答える 3

1

解決策を見つけました。私のソリューションへのリンクで元の投稿を更新しました。

于 2012-06-28T09:06:32.323 に答える
0

DataTemplate の問題ではありません。ElemetName とのバインドは、ContextMenu の場合を除いてすべての場合に機能します。これは、ウィンドウと同じビジュアル ツリーにないためです。PlacementTargetただし、コンテキスト メニューのプロパティを使用できるハックが 1 つあります。

詳細については、このリンクを参照してください - http://social.msdn.microsoft.com/Forums/nl/wpf/thread/526ab350-8788-4bc6-a98a-1e4dee6ad33a ここで達成しようとしていることが正確に含まれています。

于 2012-06-28T08:20:51.063 に答える
0

ここにあなたの質問に対する答えがあるようです:

于 2012-06-28T08:57:22.637 に答える