【发布时间】:2014-09-18 07:47:47
【问题描述】:
我有一个名为 cmpc 的 CompositeCollection,其中包含一些 ObservableCollection。
我将 CompositeCollection 中的数据沙到 DataGrid 上,结果是它的 DataGridTextColumn,如下所示:
<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=.cmpc}" Margin="0,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding .Remarque}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn x:Name="PrisEnCompte" Binding="{Binding Path=.Flag}" Header="Pris En Compte"></DataGridTextColumn>
<DataGridTextColumn x:Name="PMRQ" Width="*" Binding="{Binding Path=.PMRQTOTM}" Header="PMID"></DataGridTextColumn>
<DataGridTextColumn x:Name="LibellePMRQ" Width="*" Binding="{Binding Path=.LibelléTOTApres}" Header="Libellé PMRQ"></DataGridTextColumn>
<DataGridTextColumn x:Name="Ligne" Width="40" Binding="{Binding Path=.Remarque}" Header="Ligne" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn x:Name="OTM" Width="*" Binding="{Binding Path=.TOTMPMRQ}" Header="OTM"></DataGridTextColumn>
<DataGridTextColumn x:Name="TOTM" Width="50" Binding="{Binding Path=.SiModifie}" Header="TOTM"></DataGridTextColumn>
<DataGridTextColumn x:Name="LibelleTOTM" Width="*" Binding="{Binding Path=.LibelléTOTApres}" Header="Libellé OTM"></DataGridTextColumn>
<DataGridTextColumn x:Name="GA" Width="70" Binding="{Binding Path=.Groupe_D_alerte}" Header="GA"></DataGridTextColumn>
<DataGridTextColumn x:Name="Discipline" Width="*" Binding="{Binding Path=.NomTable}" Header="Discipline"></DataGridTextColumn>
<DataGridTextColumn x:Name="DisciplineSubstituee" Width="120" Binding="{Binding Path=.NomChamp}" Header="Discipline Substituée"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
确切地说,我只想查看 .Remarque 不是 NULL 值的行,它是由 DataGrid.RowStyle 完成的:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding .Remarque}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
在不同DataGridTextColumn 上绑定的数据来自同一个 CompositeCollection (cmpc) 但来自不同的 Observable Collection,如前所述。
例如.Flag来自ObservableCollectionActiviteCollection,.PMRQTOTM来自ResultatCollection,如.LibelléTOTApres和.LibelléTOTAvant,.Discipline来自D98DetailsCollection等。
效果很好,我可以将数据放入数据网格,但我有一个问题。
数据打印“ObservableCollection after ObservableCollection”我的意思是数据没有交叉。它首先打印来自ResultatCollection 的数据,然后让DataGridTextColumns 与另一个 ObservableCollection 绑定为空,然后打印来自另一个 ObservableCollection 的数据(例如.D98DetailsCollection)并让其他DataGridTextColumns 与另一个 ObservableCollection 绑定为空,等等.
我不明白为什么我会在 ObservableCollection 之后得到 ObservableCollection,但这不是我的目标。我想获得交叉数据。 .PMRQTOTM 是每个 ObservableCollection 的“primaryKey”,所以对于同一个 .PMRQTOTM,我想在同一行中查看来自 D98DetailsCollection、ActiviteCollection、ResultatCollection 等的数据。
我希望我的要求足够精确,不要犹豫,让我添加一些代码,比如我如何制作 CompositeCollection、ObservableCollections 或其他任何东西。
提前感谢您的帮助。
您好。
【问题讨论】:
-
这是复合集合的常见行为,您可以尝试排序。你可能想看看stackoverflow.com/questions/2155395/…
-
我检查一下,谢谢你的链接
-
哇,听起来很复杂。我看到 IBindingList 可以让我得到我想要的东西,我会尝试使用这个属性。
标签: c# wpf mvvm data-binding datagrid