WPF .Net 4 アプリケーションでは、内部データグリッドを持つ RowDetailsTemplate にあるように、データグリッドに詳細情報を持つことができる行があるマスター詳細状況があります。
RowDetailsTemplate 内には、コンテキスト メニューを持つサブ詳細を保持するためのグリッドがあります。見つかった問題は、詳細の MenuItem の 1 つの CommandTarget をバインドするときに、テンプレートによって生成された詳細データグリッドをターゲットにできないことです。以下のバインディングは、詳細情報/コンテキストメニューを保持している包含データグリッドではなく、マスターデータグリッドを取得することになります。
<DataGrid x:Name="dgEditScript" ItemsSource="{Binding CurrentScript}">
<DataGrid.CommandBindings>
<CommandBinding Command="commands:ScriptingCommands.SetChecked"
Executed="CheckAllAfter" />
</DataGrid.CommandBindings>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding SubCommands}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Check All From Selected"
Command="commands:ScriptingCommands.SetChecked"
CommandTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
<MenuItem.Icon>
<Image Source="Images/checkboxes.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
上記の Realtive ソース バインディングを使用する場合の問題は、dgEditScript グリッド (トップ レベル) であり、コンテキスト メニューの親ではなく、コンテキスト メニューが起動された名前のない保持 DataGrid です。
バインディングでサブ グリッドを取得するにはどうすればよいですか。コンテキストメニューの親をターゲットにするには?