/ / DataGrid w DataGrid.RowDetailsTemplate z tym samym ItemsSource (bieżącym elementem) - c #, wpf, datagrid

DataGrid w DataGrid.RowDetailsTemplate z tym samym ItemsSource (bieżącym elementem) - c #, wpf, datagrid

Mam problem z DataGrid, który jest wewnątrz DataGrid.RowDetailsTemplate.

Mam klasy ObservableCollection, które maokoło 20 nieruchomości, ale nie ma innych kolekcji. Chcę je podzielić, aby uzyskać lepszy ogląd. Pierwsza DataGrid o nazwie "mainGrid" powinna pokazać 10 pierwszych właściwości ...

Następnie zdefiniowałem DataGrid.RowDetailsTemplate, aby wyświetlić resztę, jeśli użytkownik kliknie wiersz. Ale to nie działa. Druga DataGrid, która jest wewnątrz 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>

Wyświetla tylko nagłówki w RowDetails (kiedy klikam w wiersz), ale bez zawartości. Zakładka wyjściowa nie pokazuje żadnych błędów wiązania.

Myślę, że potrzebuję również ItemsSource, ale nie wiem jak to zrealizować, ponieważ inne właściwości odnoszą się do bieżącego lub selectedItem.

Ale to na przykład działa dobrze:

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

Ale naprawdę chcę DataGrid z powodu nagłówków itp. ...

Korzystam z .NET 3.5

Z góry bardzo dziękuję!

Odpowiedzi:

0 dla odpowiedzi № 1

Naprawdę nie możesz tego zrobić. ItemsSource spodziewa się być IEnumerable a co chcesz, to dać mu jeden przedmiot.

Jest to rodzaj hacky do osiągnięcia tego. W klasie obiektu, który wiąże zewnętrzny obiekt ItemSource, aby zdefiniować nową właściwość, która zwraca się w postaci 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>

Mówisz, że chcesz nagłówki. Moją rekomendacją jest tworzenie nagłówków z odpowiednimi narzędziami, a nie zlepianie kwadratów w kręgi, ponieważ istnieją kręgi.


0 dla odpowiedzi nr 2

Spróbuj tego

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