Datagrid 行模板中的 Datagrid
Datagrid in Datagrid 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>
我的数据模板
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); }
}
}
我的属性:
public ObservableCollection<GroupedSelectableIndividualDefendantSearchResult> GroupedSearchResults
{
get { return _groupedSearchResults; }
set { SetProperty(ref _groupedSearchResults, value); }
}
主 DataGrid ItemSource 是
ItemsSource="{Binding GroupedSearchResults}"
我可以看到 SearchDate 绑定到主要行,但是 RowDataTemplate 是空字符串...我做错了什么?
不要将 DataContext
绑定到 {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>
您的 DataTemplate 的 DataContext 类型是 IndividualDefendantSearchViewModel
。所以您的 ItemsSource 绑定指向 IndividualDefendantSearchViewModel.SelectableIndividualDefendantSearchResults
,对吗?
您必须绑定到 SelectableIndividualDefendantSearchResults
属性 所在的另一个 DataContext。
您可以使用以下方法执行此操作:
{Binding DataContext.SelectableIndividualDefendantSearchResults, RelativeSource={RelativeSource AncestorType=UserControl}}
UserControl 持有具有目标 属性 的 DataContext,您需要根据您的目的调整它(如果它与 UserControl 不同)。
加法:
mm8说的对。不要绑定到 DataGrid 的 DataContext,没有必要。
无法将集合 属性 绑定到数据网格行模板
<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>
我的数据模板
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); }
}
}
我的属性:
public ObservableCollection<GroupedSelectableIndividualDefendantSearchResult> GroupedSearchResults
{
get { return _groupedSearchResults; }
set { SetProperty(ref _groupedSearchResults, value); }
}
主 DataGrid ItemSource 是
ItemsSource="{Binding GroupedSearchResults}"
我可以看到 SearchDate 绑定到主要行,但是 RowDataTemplate 是空字符串...我做错了什么?
不要将 DataContext
绑定到 {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>
您的 DataTemplate 的 DataContext 类型是 IndividualDefendantSearchViewModel
。所以您的 ItemsSource 绑定指向 IndividualDefendantSearchViewModel.SelectableIndividualDefendantSearchResults
,对吗?
您必须绑定到 SelectableIndividualDefendantSearchResults
属性 所在的另一个 DataContext。
您可以使用以下方法执行此操作:
{Binding DataContext.SelectableIndividualDefendantSearchResults, RelativeSource={RelativeSource AncestorType=UserControl}}
UserControl 持有具有目标 属性 的 DataContext,您需要根据您的目的调整它(如果它与 UserControl 不同)。
加法:
mm8说的对。不要绑定到 DataGrid 的 DataContext,没有必要。