我的目标:右键单击我的 ListView 中的特定项目,弹出一个上下文菜单,选择一个命令,然后我根据选择的项目的上下文菜单运行一个函数。
我的 ListView 的 ItemsSource 绑定到 CollectionViewSource,其来源是“Items”的 ObservableCollection。(ListView, binds -> CollectionViewSource, source -> ObservableCollection of class "Item")
我试图做的是将一个通用的 ContextMenu 添加到列表视图中的所有“项目”中,并且当为列表视图中的项目选择上下文菜单项时,将运行一个命令。我能够让命令在一般情况下运行,但我无法获得有关选择上下文菜单的特定项目的任何信息/参数。
在此示例中,“Item”类有一个名为 host 的字符串,我想将 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;
}