将listview动态绑定到相应的datagrid行

时间:2016-06-06 15:27:25

标签: wpf listview data-binding binding datatemplate

我在数据网格中有一个列表视图,但是我在分配依赖于ItemsSource="{Binding Users}"的ID的项目源时遇到了问题。换句话说,我试图让每个列表视图只显示与id对应的数据。 我目前有循环,将为用户收集数据的数据集,我只是在绑定每个数据集时遇到问题。

<DataGrid Name="dgUsers" ItemsSource="{Binding Users}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Client" Binding="{Binding Name}"/>
          <!--  <DataGridTextColumn Header="Land Line" Binding="{Binding LandLine}"/>    -->     
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate x:Name="datatemplate">
                <DockPanel Background="GhostWhite">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200"/>
                            <ColumnDefinition Width="200"/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>

                         <ListView x:Name="lvData" Margin="10,82,10,156" Grid.Column="2" ItemsSource="{Binding view }" SelectedValue="{Binding selectedValue}" MouseDoubleClick="LoadSelectedData" >
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn Width="150" DisplayMemberBinding="{Binding type}">
                                        <GridViewColumnHeader Tag="type" Content="Type" FontSize="12"/>
                                    </GridViewColumn>
                                    <GridViewColumn Width="150" DisplayMemberBinding="{Binding source}">
                                        <GridViewColumnHeader Tag="source" Content="Source" FontSize="12"/>
                                    </GridViewColumn>
                                    <GridViewColumn Width="180" DisplayMemberBinding="{Binding stage}">
                                        <GridViewColumnHeader Tag="stage"  Content="Stage" FontSize="12"/>
                                    </GridViewColumn>


                                </GridView>
                            </ListView.View>
                        </ListView>

1 个答案:

答案 0 :(得分:0)

如果我理解你正在做什么 - 每个User都有一个属性列表 - 通常的方法是在每个用户上放置一个预先过滤的属性项集合datagrid中的item,然后将其绑定到ListView中的RowDetailsTemplateDataContext内的DataTemplate将是User类的某个实例,因此,如果该用户属性集合为User.dataForUser,则您只需绑定:

<ListView ItemsSource="{Binding dataForUser}" ... />

那应该这样做。

您还可以编写multi-value converter并将其用于绑定完整集合的多重绑定,以及用于过滤集合中所需项目子集的用户ID。转换器将进行过滤并返回List<SomeUserPropertyClass>。无需将其设为ObservableCollection,因为在IMultiDataConverter.Convert()返回后,您无法对其进行任何更改。但绑定到完整集合意味着某种RelativeSource绑定从主视图模型中获取该属性。 XAML中有很多额外的噪音。

在我看来,在viewmodel类中构建这个主 - 细节关系既合适又方便。