WPF/XAML で右クリックメニューへの DataContext の引き回し
DataGrid 上で右クリックしてウィンドウ開くときに、
そのウィンドウに DataGrid からデータ渡したかった。
<DataGrid ItemsSource="{Binding ItemList}" AutoGenerateColumns="False" SelectedItem="{Binding DataContext.CurrentItem, ElementName=RootWindow}" Tag="{Binding DataContext, ElementName=RootWindow}" Name="ItemGrid"> <DataGrid.Columns>...</DataGrid.Columns> <DataGrid.ContextMenu> <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> <MenuItem Header="編集"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <b:WindowTransitionAction DestinationWindow="{x:Type v:EditEnvWindow}" Mode="ShowDialog" DestinationWindowTag="{Binding CurrentItem}" OnClosedSourceWindowTarget="{Binding}" OnClosedSourceWindow="UpdateList"/> </i:EventTrigger> </i:Interaction.Triggers> </MenuItem> </ContextMenu> </DataGrid.ContextMenu> </DataGrid>
どうやらポップアップ系は XAML で定義したビジュアルツリーから外れてるらしく、
WindowTransitionAction の中で AssociatedObject の Parent を辿ってたら
Popup のとこで Parent が null になってた。
しかたないから、ContextMenu の親が一旦 View の DataContext を抱えといて、
それを更に ContextMenu の DataContext を経由して Action に渡すことに。
なにこれめんどくさい。。