我目前正在开发“锦标赛生成器”,我需要将培训师与团队联系起来。因此,我使用了带有集成Comboboxes的 WPF ListView 。选择模式“多个”这是一张图片:
没有名声,因为没有声誉。
看起来像这样:
它有两列。第一列包含不同的教练名称。第二列在每一行中包含一个具有不同团队的组合框。对于每个培训师,可以在组合框中选择一个团队。
以下是代码:
<ListView x:Name="TrainerListView" ItemsSource="{Binding Trainer}" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionMode="Multiple">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Trainer" Width="150"/>
<GridViewColumn Header="Team" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},Path=DataContext.Teams}" Width="120" DisplayMemberPath="Name"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
从代码中可以看出,ListView将Trainer属性作为ItemsSource,ComboBoxes为Teams属性。
单击按钮后,我想获取所有选定的值。在这里:“大卫与利物浦队”,“贝尔德与多特蒙德队”和“蒂姆与拜仁慕尼黑队”。我尝试了以下方法:
private void StartTournamentButton_Click(object sender, RoutedEventArgs e)
{
var selectedItems = TrainerListView.SelectedItems;
}
但selectedItems变量只保存选定的训练对象“David,Bernd和Tim”。
我仍然找不到从ListView中检索“团队价值”的方法,更不用说培训师和团队的关联了。如何获取所选行的值?最好作为相关值。
最好的问候,
大卫
答案 0 :(得分:1)
在Trainer
课程中,除了AssignedTeam
之外,您还需要另外一个属性Name
。
public string AssignedTeam { get; set; }
将组合框的SelectedItem
与该属性绑定:
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}},Path=DataContext.Teams}"
SelectedItem="{Binding AssignedTeam}"
Width="120"/>
现在,SelectedItems will give you list of objects of Trainer class
从哪里可以访问团队指定的属性:
var selectedItems = TrainerListView.SelectedItems;
string assignedTeam = ((Trainer)selectedItems[0]).AssignedTeam;