Search code examples
c#wpfdatagridrowdetailstemplate

Datagrid in Datagrid Row Template


Can't bind collection property to data grid row template

<DataTemplate x:Key="RowDetailsTemplate" DataType="{x:Type summons:IndividualDefendantSearchViewModel}">

            <controls:ExtendedDataGrid
                x:Name="RowDetails"
                CanUserSortColumns="True"
                ContentWidth="910"
                DataContext="{Binding ElementName=Parent, Path=DataContext.GroupedSearchResults}"
                Focusable="False"
                HeadersVisibility="None"
                IsSynchronizedWithCurrentItem="False"
                ItemsSource="{Binding Path=SelectableIndividualDefendantSearchResults}"
                ShowRowSelection="False">

                <controls:ExtendedDataGrid.Columns>             
                    <DataGridTextColumn
                        Width="*"
                        Binding="{Binding Name}"
                        Header="{localization:LanguageBinding ResourceKey=Name}" />
                </controls:ExtendedDataGrid.Columns>
            </controls:ExtendedDataGrid>
        </DataTemplate>

My Data Template

public class SelectableIndividualDefendantSearchResult : CheckedListItem<SearchResult>
{

    public string Name
        => $"{Item.FirstName} {(string.IsNullOrEmpty(Item.Insertion) ? "" : Item.Insertion + " ")}{Item.LastName}";


}

public class GroupedSelectableIndividualDefendantSearchResult: EnhancedBindableBase
{

    public DateTime? SearchDate { get; set; }

    public ObservableCollection<SelectableIndividualDefendantSearchResult>
        _selectableIndividualDefendantSearchResults;


    public ObservableCollection<SelectableIndividualDefendantSearchResult>
        SelectableIndividualDefendantSearchResults {
        get { return _selectableIndividualDefendantSearchResults; }
        set { SetProperty(ref _selectableIndividualDefendantSearchResults, value); }
    }

}

My property:

public ObservableCollection<GroupedSelectableIndividualDefendantSearchResult> GroupedSearchResults
    {
        get { return _groupedSearchResults; }
        set { SetProperty(ref _groupedSearchResults, value); }
    }

Main DataGrid ItemSource is

ItemsSource="{Binding GroupedSearchResults}"

I can see SearchDate bound to main rows, but RowDataTemplate is empty string... What i am doing wrong?


Solution

  • Don't bind the DataContext to {Binding ElementName=Parent, Path=DataContext.GroupedSearchResults}:

    <DataTemplate x:Key="RowDetailsTemplate">
        <controls:ExtendedDataGrid
                    x:Name="RowDetails"
                    CanUserSortColumns="True"
                    ContentWidth="910"
                    Focusable="False"
                    HeadersVisibility="None"
                    IsSynchronizedWithCurrentItem="False"
                    ItemsSource="{Binding Path=SelectableIndividualDefendantSearchResults}"
                    ShowRowSelection="False">
    
            <controls:ExtendedDataGrid.Columns>
                <DataGridTextColumn
                            Width="*"
                            Binding="{Binding Name}"
                            Header="{localization:LanguageBinding ResourceKey=Name}" />
            </controls:ExtendedDataGrid.Columns>
        </controls:ExtendedDataGrid>
    </DataTemplate>