我在数据网格中有一个列表视图,但是我在分配依赖于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>
答案 0 :(得分:0)
如果我理解你正在做什么 - 每个User
都有一个属性列表 - 通常的方法是在每个用户上放置一个预先过滤的属性项集合datagrid中的item,然后将其绑定到ListView
中的RowDetailsTemplate
。 DataContext
内的DataTemplate
将是User
类的某个实例,因此,如果该用户属性集合为User.dataForUser
,则您只需绑定:
<ListView ItemsSource="{Binding dataForUser}" ... />
那应该这样做。
您还可以编写multi-value converter并将其用于绑定完整集合的多重绑定,以及用于过滤集合中所需项目子集的用户ID。转换器将进行过滤并返回List<SomeUserPropertyClass>
。无需将其设为ObservableCollection
,因为在IMultiDataConverter.Convert()
返回后,您无法对其进行任何更改。但绑定到完整集合意味着某种RelativeSource
绑定从主视图模型中获取该属性。 XAML中有很多额外的噪音。
在我看来,在viewmodel类中构建这个主 - 细节关系既合适又方便。