Ich habe nur ein Datagrid in einer einzigen Ansicht, aber die Sammlungen, die ItemsSource dieses Datagrid sind in verschiedenen Ansichtsmodellen. Ist es also möglich, dieses einzelne DataGrid mit den Kollektionen in zwei verschiedenen View-Modellen zu verbinden?XAML Bindung an CompositeCollection
Zeigen Sie für jede Zeile im Raster einen Artikel aus einer Sammlung und einen Artikel aus der anderen Sammlung an ..! um alle Spalten in einer Zeile anzuzeigen.
XAML:
DataContext="{DynamicResource ViewModelCombine}">
<Window.Resources>
<vm:ViewModelCombine x:Key="ViewModelCombine"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid>
<DataGrid.Resources>
<CollectionViewSource x:Key="ViewModelPulse" Source="{Binding VP}"/>
<CollectionViewSource x:Key="ViewModeltherapy" Source="{Binding VT}"/>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource ViewModelCombine}, Path=VP}" />
<CollectionContainer Collection="{Binding Source={StaticResource ViewModelCombine}, Path=VT}" />
</CompositeCollection>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Header="AMP" Binding="{Binding AMP}" Width="100"/>
<DataGridTextColumn Header="PW" Binding="{Binding PW}" Width="100" />
<DataGridTextColumn Header="DZ0" Binding="{Binding DZ0}" Width="100" />
<DataGridTextColumn Header="DELTA" Binding="{Binding DELTA}" Width="100" />
<DataGridTextColumn Header="DZ1" Binding="{Binding DZ1}" Width="100"/>
<DataGridTextColumn Header="M" Binding="{Binding M}" Width="100" />
<DataGridTextColumn Header="DZ2" Binding="{Binding DZ2}" Width="100" />
<DataGridTextColumn Header="N" Binding="{Binding N}" Width="100" />
</DataGrid.Columns>
</DataGrid>
</Grid>
xaml.cs:
public MainWindow()
{
InitializeComponent();
ViewModelCombine VMC = new ViewModelCombine();
this.DataContext = VMC;
}
ViewModelCombine.cs
public class ViewModelCombine
{
public ViewModelTherapy VT { get; set; }
public ViewModelPulse VP { get; set; }
public ViewModelCombine()
{
VT = new ViewModelTherapy();
VP = new ViewModelPulse();
}
}
Gemäß dem obigen Code, zeigt es wie dieses Output ..aber wollte um alle Spalten in einer Zeile anzuzeigen.
So ist es möglich, dieses einzelne DataGrid in Sicht mit den Sammlungen in zwei verschiedenen Ansichtsmodellen zu verbinden?
Danke für Ihre Hilfe.
Beachten Sie, dass VP hat: FirstName, LastName & VT hat: ID, Gehalt als Eigenschaften..Sollte alle Eigenschaften in einer Zeile anzeigen (Nicht wie VP Eigenschaften in einer Zeile und VT-Eigenschaften in einer anderen Zeile, oben zur Verfügung gestellt) ..Vielen Dank. – Kumar
Dann nehme ich an, dass das, was Sie wollen, nicht mit mir oder Ihrem Ansatz möglich ist. Ich würde vorschlagen, eine neue Sammlung zu erstellen, die VP und VT basierend auf ihren IDs zu einem neuen Objekt kombiniert (wenn möglich mit linq). Und binden Sie diese neue Sammlung an das Datagrid. Andernfalls werden bei der Verwendung von Composite collection 2 Kollektionen zu einem kombiniert, aber Sie werden ihre Eigenschaften nicht kombinieren, was ich denke, was Sie tun möchten. –
Es wurde versucht, zwei ObservableCollections zusammenzuführen und Datagrid mit dieser MergedCollection zu verbinden..Bitte verweisen Sie auf diesen Link. http://stackoverflow.com/q/40147381/7040506 – Kumar