タイトルに記載されている場所でICommandにバインドするのに苦労します。ListViewのグリッドのLabelのContextMenuでICommandにバインドできない
まず、私のDataContextはItem
で、私のViewModelではないので、何とかこの問題を回避する必要があります。私はすでにItemClickCommandでこれを行なっていましたが、同じ解決法は機能しません:
第2に、ContextMenuはウィンドウの一部ではなく、ビジュアルまたは論理ツリーの一部ではありません。私はこれを回避するためにどのような木工を実装する必要があるのか分かりません。
のViewModel:
public ICommand CopyTextCommand { get; private set; }
public Constructor()
{
CopyTextCommand = new RelayCommand(InsertToClopboard);
Initialize();
}
private void InsertToClopboard(object parameter)
{
// Want to get in here.
}
ビュー:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListView Grid.Row="0" x:Name="MainListView" ItemsSource="{Binding Items}" Background="Transparent" BorderBrush="Transparent" Margin="0" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="0" Visibility="{Binding GuiVisibility, Converter={StaticResource BoolToVisibility}}">
<Grid.InputBindings>
<MouseBinding Gesture="LeftClick"
Command="{Binding Path=DataContext.ItemClickCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
CommandParameter="{Binding}"/>
</Grid.InputBindings>
<Label ...
Content="{Binding PNR}" >
<Label.ContextMenu>
<ContextMenu>
<MenuItem
Name="MenuItemPnr"
Header="Copy"
Command="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.DataContext}" <--This does not work-->
CommandParameter="test" />
</ContextMenu>
</Label.ContextMenu>
</Label>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
EDIT:MenuItem
の私は、XAML専用で正しい結合の複数の場所にタグを追加しようとしました が、PlacementTarget ContextMenu
です。また、ContextMenuは正しいDataContextを認識しません。これをどうやって回避するのですか?
[WPFの可能な重複:MVVMへのContextMenu結合Command](https://stackoverflow.com/questions/3583507/wpf-binding-a-contextmenu-to-an-mvvm-command) – Sinatr
コマンドパラメータとして「self」にバインドすることで解決できる最初の問題は、親 'DataContext'が必要です。次に、ビジュアルツリーを通過します。 – Sinatr