/ / DataGrid in DataGrid.RowDetailsTemplate con gli stessi ItemsSource (elemento corrente) - c #, wpf, datagrid

DataGrid in DataGrid.RowDetailsTemplate con stessa ItemsSource (elemento corrente) - c #, wpf, datagrid

Ho un problema con un DataGrid che si trova all'interno di un DataGrid.RowDetailsTemplate.

Ho una classe ObservableCollection che hacirca 20 proprietà ma nessuna altra collezione. Voglio dividerli per una migliore visualizzazione. Il primo DataGrid chiamato "mainGrid" dovrebbe mostrare le prime 10 proprietà ...

Quindi ho definito DataGrid.RowDetailsTemplate per mostrare il resto se l'utente fa clic sulla riga. Ma non funziona. Il secondo DataGrid che si trova all'interno del RowDetailsTemplate

    <Dgv:DataGrid.RowDetailsTemplate>
<DataTemplate>
<Dgv:DataGrid x:Name="dgvRowDetails">

<Dgv:DataGrid.Columns>
<Dgv:DataGridTextColumn Header="Parameter 1"
Binding="{Binding Parameter1}" />
<Dgv:DataGridTextColumn Header="Parameter 2"
Binding="{Binding Parameter2}" />
</Dgv:DataGrid.Columns>
</Dgv:DataGrid>
</DataTemplate>
</Dgv:DataGrid.RowDetailsTemplate>

Visualizza solo le intestazioni nei RowDetails (quando clicco su una riga) ma nessun contenuto. La scheda di output non mostra errori di associazione.

Penso di aver bisogno anche di un ItemsSource ma non so come realizzarlo perché le altre proprietà si riferiscono all'oggetto corrente o selezionato.

Ma questo ad esempio funziona benissimo:

    <Dgv:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text = "{Binding Parameter1}" />
<TextBlock Text = "{Binding Parameter2}" />
</StackPanel>
</DataTemplate>
</Dgv:DataGrid.RowDetailsTemplate>

Ma voglio davvero un DataGrid a causa delle intestazioni ecc ...

Sto usando .NET 3.5

Molte grazie in anticipo!

risposte:

0 per risposta № 1

Non puoi davvero farlo. ItemsSource si aspetta di essere un IEnumerable e quello che vuoi è dargli un singolo oggetto.

Questo è un modo un po 'confuso per realizzarlo. Nella classe del tuo oggetto che leghi la ItemSource del datagrid esterno per definire una nuova proprietà che si restituisce sotto forma di alcuni IEnumerable

public class MyClass
{
public IEnumerable<MyClass> AsIEnumerable
{
get
{
yield return this;
}
}
}

XAML

//Inner datagrid
//Datacontext is MyClass object
<Dgv:DataGrid x:Name="dgvRowDetails"
AutoGenerateColumns="False"
ItemsSource="{Binding AsIEnumerable}">
<Dgv:DataGrid.Columns>
<Dgv:DataGridTextColumn Header="Parameter 1"
Binding="{Binding Path=Parameter1}" />
<Dgv:DataGridTextColumn Header="Parameter 2"
Binding="{Binding Path=Parameter2}" />
</Dgv:DataGrid.Columns>
</Dgv:DataGrid>

Dici che vuoi le intestazioni. La mia raccomandazione è di creare intestazioni con gli strumenti adeguati, non quadrati di calzascarpe nei circoli perché esistono dei circoli.


0 per risposta № 2

Prova questo

 <Dgv:DataGrid x:Name="dgvRowDetails" ItemsSource="{Binding}">