CompositeCollection由MVVM一个DataGrid绑定(CompositeColl

2019-10-28 21:16发布

我有一个CompositeCollection称为cmpc其中包含一些的ObservableCollection。

从CompositeCollection我沙DATAS到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>

绑定在型动物的DATAS DataGridTextColumn来自同CompositeCollection( cmpc ),但是从型动物观察的集合如前所述。

例如,.Flag来自的ObservableCollection ActiviteCollection ,.PMRQTOTM来自ResultatCollection ,像.LibelléTOTApres和.LibelléTOTAvant,.Discipline来自D98DetailsCollection

它运作良好,我可以得到DATAS到DataGrid中,但我有一个问题。

的数据都是印有“的ObservableCollection的ObservableCollection后,”我的意思的数据都是不交叉。 它从打印DATAS ResultatCollection第一和让DataGridTextColumn s的另一个的ObservableCollection绑定空,则来自另一个的ObservableCollection的DATAS是打印(.D98DetailsCollection例如),并让其他人DataGridTextColumn s的另一个的ObservableCollection空绑定等

我不明白为什么我的ObservableCollection后得到的ObservableCollection,但它不是我的目标。 我想交叉DATAS。 .PMRQTOTM是各自的ObservableCollection的“PrimaryKey的”,因此对于同一.PMRQTOTM,我想在同一行看到从D98DetailsCollection的DATAS,ActiviteCollection,ResultatCollection等。

我希望我一直对我的要求足够精确,不要犹豫,问我加入一些代码,也许像我怎么做我CompositeCollection,我ObservableCollections,或其他任何东西。

预先感谢您的帮助。

问候。

Answer 1:

我总是避免CompositeCollection就像瘟疫。 他们是尴尬的使用,因为你已经发现了,真的,完全没有必要。 我觉得这是更好的把我的所有不同类型的对象到一个单一的集合,因为他们可以以任意顺序。 您可以在许多不同的方式做到这一点,用不同的方法是在某些情况下和其他人更适合于其他方案更好。

有一件事情,我们能做的就是定义一个包含我们所有的数据类型,我们要在集合中显示常见的属性的基类。 那么,我们的集合可以是基类的类型,我们可以添加任何派生类型进去。 第二,类似的选项是定义暴露出公共属性界面,在相关类实现它,然后让该接口类型的集合。

最后一个选项是简单地使用类型的集合object 。 现在,我们可以添加任何类型的调查,并以任意顺序。



文章来源: CompositeCollection binding on a DataGrid by MVVM