如何从自定义ListView获取具有两个不同绑定的所有信息?

时间:2013-12-26 12:37:22

标签: wpf listview

我目前正在开发“锦标赛生成器”,我需要将培训师与团队联系起来。因此,我使用了带有集成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中检索“团队价值”的方法,更不用说培训师和团队的关联了。如何获取所选行的值?最好作为相关值。

最好的问候,

大卫

1 个答案:

答案 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;