我正在制作CRUD地址簿以熟悉WPF应用程序。
我有三个类:AllContacts,User和SingleContact。 AllContacts使用ObservableCollection将所有现有联系人保存为用户对象。 SingleContact仅用于在新窗口中显示信息(我实际上不太确定这是否有必要,您对此有何看法)?
我将在下面解释更多:
我使用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(类:SingleContact)以显示所有选定联系人的信息。
以下方法在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;
}
}
但是,当我在代码中创建新的SingleContact对象时,我不确定如何获得在Window_1(XAML:AllContacts)中单击的联系人的值并将User Object值传递给Window_2(class:SingleContact)上方。
我如何优雅地实现这一目标?
提前致谢!
答案 0 :(得分:0)
这是我过去写过的类似应用程序。基本上,您正在调用一个命令(我正在使用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"
答案 1 :(得分:0)
首先,您需要更改将显示联系人的构造函数或窗口,以便它可以显示内容,或者您可以添加另一个。
然后在初始化窗口时,您需要传递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是访问列表视图中所选项目的代码
希望这有帮助。