私の目標: ListView の特定の項目を右クリックすると、コンテキスト メニューがポップアップ表示され、コマンドを選択した後、どの項目のコンテキスト メニューが選択されたかに基づいて関数を実行します。
私の ListView の ItemsSource は CollectionViewSource にバインドされており、そのソースは "Items" の ObservableCollection です。(ListView、バインド -> CollectionViewSource、ソース -> クラス「Item」の ObservableCollection)
私がやろうとしたことは、リストビューのすべての「アイテム」に一般的な ContextMenu を追加することです。ListView のアイテムに対してコンテキスト メニュー アイテムが選択されると、コマンドが実行されます。コマンドを一般的に実行することはできましたが、コンテキスト メニューが選択された特定の項目に関する情報やパラメータを取得できませんでした。
この例では、"Item" クラスに host という文字列があり、ホスト文字列を RefundRequestCommand に渡したいのですが、CommandParameters を渡すことができませんでした。
データ テンプレートの作成とその使用についていくつか読んだことがありますが、うまくいきませんでした。誰かが私を案内/助けてくれますか?
参照用のコードを次に示します。
リストビュー:
<ListView x:Name="ordersList" Margin="0,10,10,0" BorderThickness="2" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Stretch" ItemsSource="{Binding Source={StaticResource cvsOrders}}" SelectionChanged="ordersList_SelectionChanged" SelectedIndex="0" SelectionMode="Extended">
<ListView.Resources>
<local:RefundRequestCommand x:Key="refund"></local:RefundRequestCommand>
</ListView.Resources>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="test" Command="{StaticResource refund}" CommandParameter="{Binding host}"></MenuItem>
</ContextMenu>
</ListView.ContextMenu>
<ListView.View>
<GridView>
<GridViewColumn Width="140">
<GridViewColumnHeader Name="OrderNumber" Click="sortClick" Tag="orderNumber" Content="Order Number" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding orderNumber}" TextAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
//On and On.....
指示:
class RefundRequestCommand : ICommand
{
TreeViewFilter treeViewFilter;
public void Execute(object parameter)
{
string host = (string)parameter;
Console.WriteLine(host); //FOR TESTING
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}