Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中获取ListViewItem的索引值?_C#_Wpf_Xaml - Fatal编程技术网

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

C# 如何在WPF中获取ListViewItem的索引值?,c#,wpf,xaml,C#,Wpf,Xaml,我正在制作一个CRUD通讯簿,以熟悉WPF应用程序 我有三个类:AllContacts、User和SingleContact。AllContacts使用ObservableCollection将所有现有联系人作为用户对象保存。SingleContact只是用来在一个新窗口中显示信息,实际上我不太确定这是否必要,你对此有何想法 我将在下面详细解释: 我使用ListView显示窗口_1 XAML:AllContacts中的所有联系人,如图所示: <ListView Name="lbUsers"

我正在制作一个CRUD通讯簿,以熟悉WPF应用程序

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

我将在下面详细解释:

我使用ListView显示窗口_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>
但是,当我在上面的代码中创建新的SingleContact对象时,我不确定如何获得在Window_1 XAML:AllContacts中单击的联系人的值,并将用户对象值传递到Window_2 class:SingleContact中

我如何优雅地做到这一点


提前谢谢

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

<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>

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

然后,在初始化窗口时,需要按如下方式传递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;
用户要将所选项目强制转换为类对象,现在在window2中,您可以根据需要显示所选项目。这是针对当前窗口lbUsers的。SelectedItem是访问listview中所选项目的代码


希望这能有所帮助。

谢谢,这确实有效!之后如何在SingleContact窗口上显示信息?我在该窗口中不再有lbUsers了。@susieloo\uuu抱歉,晚餐:D,您需要创建一个可以显示您的对象的控件,如另一个listview或datagrid。。。
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;