首页 > 解决方案 > 如何检测在 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 文件中创建它的方法。这会检测点击了哪一列,即。编辑或删除,但我还需要相应的行详细信息才能处理编辑和删除操作。

标签: c#wpflistview

解决方案


在您的列表视图 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);
        }
    }

推荐阅读