如何在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)。
我如何优雅地做到这一点?
提前感谢!
首先,您需要更改构造函数或将显示联系人的窗口,以便它可以显示什么,或者您可以添加另一个。
然后,当初始化窗口时,您需要像这样传递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"