c# - 如何检测在 C# WPF 的列表视图中单击了哪一行和哪一列
问题描述
我有一个 wpf 项目,其中我有一个表单,并且我添加了一个列表视图。我总共加载了 8 行。而且我还添加了另外 2 个带有文本的列作为编辑和删除。现在我需要的是单击编辑和删除单击相应的行列详细信息。就像用户点击编辑一样,编辑代码应该执行。删除点击也一样。我在这里附上我的 wpf xaml 文件代码
<ListView x:Name="lstViewIrctcId" HorizontalAlignment="Left" Height="271" Margin="4,140,0,0" VerticalAlignment="Top" Width="777" >
<ListView.Resources>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True"/>
</Trigger>
</Style.Triggers>
<EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn x:Name="Id" Header="ID" Width="135" DisplayMemberBinding="{Binding ID}" />
<GridViewColumn x:Name="Count" Header="TOTAL COUNT" Width="80" DisplayMemberBinding="{Binding COUNT}" />
<GridViewColumn x:Name="Name" Header="NAME" Width="80" DisplayMemberBinding="{Binding NAME}" />
<GridViewColumn x:Name="Address" Header="Address" Width="80" DisplayMemberBinding="{Binding ADDRESS}" />
<GridViewColumn x:Name="Status" Header="Status" Width="80" DisplayMemberBinding="{Binding STATUS}" />
<GridViewColumn x:Name="irEdit" Header="Edit" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Edit" MouseLeftButtonUp="Edit_btn_click">
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="irRemove" Header="Remove" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Edit" MouseLeftButtonUp="Delete_btn_click">
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我尝试在编辑和删除中添加 MouseLeftButtonUp 并在 .cs 文件中创建它的方法。这会检测点击了哪一列,即。编辑或删除,但我还需要相应的行详细信息才能处理编辑和删除操作。
解决方案
在您的列表视图 xaml 中,您应该通过以下命令传递列表视图项目:
Command="{Binding GetSelectedItem}" CommandParameter="{Binding Path=PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
在您的代码中,将命令声明为 Relay 命令或 delegateCommand 后,您可以调用此函数
public void YourCommandMethod(object obj)
{
try
{
//Get our list view
ListView listview = (ListView)obj;
string sNavigationPath = string.Empty;
//this is a work around to get selected item without clicking on list view, just the coordinates
var item = VisualTreeHelper.HitTest(listview, Mouse.GetPosition(listview)).VisualHit;
// find ListViewItem (or null)
while (item != null && !(item is ListViewItem))
item = VisualTreeHelper.GetParent(item);
if (item != null)
{
//Convert item to Listview
ListViewItem listviewItem = (ListViewItem)item;
//Get the data context wich hold the necessary info
var _dataContext = listviewItem.DataContext;
//Convert back to our customized listview
var _list = (ListViewItems)_dataContext;
// Do whatever you want with your elements
}
}
catch (Exception ex)
{
StaticElements.showErrorFlyout(ex.Message);
}
}
推荐阅读
- python - 如何用多条曲线重现这个传说?
- javascript - Vue:禁用 no-unused-vars 错误:最简单的修复
- sql - 雪花本周的一周结束
- python - 在python中向散点图添加标签时出错
- wpf - XAML - 通过 TextBlock 提供内容后按钮内容消失(DataGrid 的最后一行除外)
- sql-server - 在 T-SQL 中,为什么子查询上的聚合运行得更快
- java - 无法在 Eclipse 中键入主题标签
- java - 抽象对象的深拷贝
- java - 有没有办法让 @SpringBootTest 类递归?
- python - 如何为我的张量流模型找到输入和输出张量?