简体   繁体   English

数据网格行模板中的数据网格

[英]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 主DataGrid ItemSource是

ItemsSource="{Binding GroupedSearchResults}"

I can see SearchDate bound to main rows, but RowDataTemplate is empty string... What i am doing wrong? 我可以看到SearchDate绑定到主行,但RowDataTemplate是空字符串...我做错了什么?

Don't bind the DataContext to {Binding ElementName=Parent, Path=DataContext.GroupedSearchResults} : 不要将DataContext {Binding ElementName=Parent, Path=DataContext.GroupedSearchResults}{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>

The type of the DataContext of your DataTemplate is IndividualDefendantSearchViewModel . DataTemplate的DataContext类型是IndividualDefendantSearchViewModel So your ItemsSource binding points to IndividualDefendantSearchViewModel.SelectableIndividualDefendantSearchResults , right? 所以你的ItemsSource绑定指向IndividualDefendantSearchViewModel.SelectableIndividualDefendantSearchResults ,对吗?

You have to bind to another DataContext where the SelectableIndividualDefendantSearchResults property is located. 您必须绑定到SelectableIndividualDefendantSearchResults属性所在的另一个DataContext。 You can do this with the following: 您可以使用以下内容执行此操作:

{Binding DataContext.SelectableIndividualDefendantSearchResults, RelativeSource={RelativeSource AncestorType=UserControl}}

The UserControl holds the DataContext with the target property and you need to adapt it for your purpose (if it's different from UserControl). UserControl保存带有target属性的DataContext,您需要根据自己的需要调整它(如果它与UserControl不同)。

Addition: 加成:

mm8 is right. mm8是对的。 do not bind to the DataContext of your DataGrid, there is no need. 不要绑定到DataGrid的DataContext,没有必要。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM