【发布时间】:2023-03-03 06:41:23
【问题描述】:
Gitea Repo
我有一个带有 ListView 的 WPF C# 应用程序,里面有一个 GridView。
<ListView Name="Entries">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="Type" Width="Auto" DisplayMemberBinding="{Binding Type}" />
<GridViewColumn Header="Title" Width="Auto" DisplayMemberBinding="{Binding Title}" />
<GridViewColumn Header="Date" Width="Auto" DisplayMemberBinding="{Binding Date}" />
<GridViewColumn Header="Tags" Width="Auto" DisplayMemberBinding="{Binding Tags}" />
<GridViewColumn Header="Categories" Width="Auto" DisplayMemberBinding="{Binding Categories}" />
</GridView>
</ListView.View>
</ListView>
当我右键单击ListViewItems 时,应该会出现一个ContextMenu,当我单击它时,它应该会执行一个功能。
像这样的:
private void EntryClick(<identifier of click>) {
MessageBox.Show("Clicked " + <maybe title to identify what i clicked>);
}
我到处都发现了这个,但我不知道如何处理它:
<MenuItem ... CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor,ListBox,1}} />
然后我发现了这个:WPF Get name of ListView item when ContextMenu clicked 但我对item.Name 没有任何意义
编辑:
我加了
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove"
Command="{Binding RemoveItem}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
</ContextMenu>
</ListView.ContextMenu>
和
using GalaSoft.MvvmLight.Command;
private ICommand _removeItem;
public ICommand RemoveItem
{
get { return _removeItem ?? (_removeItem = new RelayCommand(p => RemoveItemCommand((string)p))); }
}
private void RemoveItemCommand(string item)
{
if (!string.IsNullOrEmpty(item))
MessageBox.Show(item);
}
但现在我得到了这个错误:
委托 System.Action 不接受 1 个参数
我安装了 NuGet 包 GalaSoft.MvvmLight,因为我没有 RelayCommand。这是正确的还是我必须创建一个类?
【问题讨论】:
-
看here。
-
@Sinatr 检查我的编辑
标签: c# wpf listview binding contextmenu