如何在WPF中获取ListViewItem的索引值

本文关键字:ListViewItem 索引值 获取 WPF | 更新日期: 2023-09-27 18:18:50

我正在制作一个CRUD地址簿,以熟悉WPF应用程序。

我有三个类:AllContacts、User和singleccontact。AllContacts使用一个ObservableCollection来保存所有现有的联系人作为用户对象。singleccontact只是用于在一个新窗口中显示信息(我实际上不太确定这是否必要,你对此有何看法)?

我将在下面解释更多:

我使用ListView来显示Window_1 (XAML: AllContacts)中的所有联系人,如下所示:

<ListView Name="lbUsers" DisplayMemberPath="Name" 
          ItemContainerStyle="{StaticResource ListView}" 
          AlternationCount="2" DockPanel.Dock="Bottom" 
          BorderThickness="0" Margin="0,4">                
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" 
                            Width="150"></GridViewColumn>
            <GridViewColumn Header="Phone Number" 
                            DisplayMemberBinding="{Binding PhoneNumber}" 
                            Width="150"></GridViewColumn>
            <GridViewColumn Header="Favorite" 
                            DisplayMemberBinding="{Binding FavoriteStr}" 
                            Width="95"></GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

然后,我想实现这样一个功能:当我双击一个联系人时,它将打开Window_2(类:singleccontact)来显示所选联系人的所有信息。

下面的方法在AllContacts:

中定义
private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e)
{
    SingleContact contactIndex = new SingleContact( [I WANT TO PASS IN USER OBJECT HERE ] );
    contactIndex.Owner = this;
    if (contactIndex.ShowDialog() != true)
    {
        return;
    }
}

但是,当我在上面的代码中创建新的singleccontact对象时,我不确定如何获得在Window_1 (XAML: AllContacts)中单击的联系人的值并将用户对象的值传递给Window_2(类:singleccontact)。

我如何优雅地做到这一点?

提前感谢!

如何在WPF中获取ListViewItem的索引值

首先,您需要更改构造函数或将显示联系人的窗口,以便它可以显示什么,或者您可以添加另一个。

然后,当初始化窗口时,您需要像这样传递listView的选定项:

private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e)
{
     SingleContact contactIndex = new SingleContact((User)this.lbUsers.SelectedItem);
     //if SingleContact is the window
     contactIndex.Show();
}

说明:

(User)this.lbUsers.SelectedItem;

user将选择的项强制转换为您的类对象,现在在window2中,您可以根据需要显示选中的项,这是针对当前窗口lbUsers的。SelectedItem是用来访问listview中选中项的代码。

这是我以前写过的一个类似的应用程序。基本上,您正在调用命令(我使用的是MVVM-Light),并将选定的练习作为参数传递。

<ListBox x:Name="LastExercises_ListView"  
                  ItemsSource="{Binding FilteredCollection}"
                  SelectedItem="{Binding SelectedExercise, UpdateSourceTrigger=PropertyChanged}"
                  ToolTip="Double click to edit"
                  >
            <ListBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header ="Edit Exercise"   
                              Command="{Binding EditExercise_Command}" 
                              CommandParameter="{Binding SelectedExercise}"
                    />
                    <MenuItem Header ="Delete Exercise" 
                              Command="{Binding DeleteExercise_Command}" 
                               CommandParameter="{Binding SelectedExercise}"
                    />
                </ContextMenu>
            </ListBox.ContextMenu>

如果你没有使用框架,你可能需要实现像Command。这里是它为我定义的地方:

 xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"