MVVM在DataGrid上的CompositeCollection绑定

本文关键字:CompositeCollection 绑定 上的 DataGrid MVVM | 更新日期: 2023-09-27 18:22:14

我有一个名为cmpcCompositeCollection,它包含一些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来自ObservableCollection ActiviteCollection,.PMRKTOTM来自ResultatCollection,如.LibelléTOTApres和.LibellèTOTAvant,.PDiscipline来自D98DetailsCollection等。

它工作得很好,我可以将数据放入数据网格,但我有一个问题。

数据打印为"ObservableCollection after Observable Collection"我的意思是数据没有交叉。它首先打印来自ResultatCollection的数据,并让与另一个ObservableCollection绑定的DataGridTextColumns为空,然后打印来自另一个ObservableCollection的数据(例如.D98 DetailsCollection),并让其他DataGridTextColumns与另一ObservableCollections绑定为空,等等。

我不明白为什么我会在ObservableCollection之后获得Observable Collection,但这不是我的目标。我想获取交叉数据。PMRQTOTM是每个ObservableCollection的"primaryKey",因此对于同一个PMRQTOTM,我希望在同一行中看到D98DetailsCollection、ActiviteCollection、ResultatCollection等的数据。

我希望我的请求足够精确,不要犹豫,请我添加一些代码,也许像我是如何制作CompositeCollection、ObservableCollections或其他任何东西的。

提前感谢您的帮助。

问候。

MVVM在DataGrid上的CompositeCollection绑定

我总是像躲避瘟疫一样躲避CompositeCollection。正如你所发现的,它们使用起来很尴尬,而且真的,完全没有必要。我发现把我所有不同类型的对象放在一个集合中要好得多,因为它们可以按任何顺序排列。你可以用多种不同的方法来做到这一点,不同的方法在某些场景中更好,而其他方法更适合其他场景。

我们可以做的一件事是定义一个基类,该基类包含我们想要在集合中显示的所有数据类型的公共属性。然后,我们的集合可以是该基类的类型,我们可以向其中添加任何派生类型。第二个类似的选项是定义一个公开公共属性的接口,在相关类中实现它,然后生成该接口类型的集合。

最后一种选择是简单地使用类型为object的集合。现在我们可以按任何顺序向其中添加任何类型。

相关文章:
  • 没有找到相关文章