通过绑定来实现会容易得多。您可以将 DetailElements 的集合添加到 dataGrid1 的 ItemsSource 的每个元素中。现在您所要做的就是将此集合绑定到您的 dataGrid2 的 ItemsSource 并通过绑定自动填充数据。
public class DataGrid1SourceItem
{
public ObservableCollection<DetailItem> DetailItems {get;set;}
}
XAML:
<Grid>
<my:DataGrid Name="dataGrid1" ItemsSource="{Binding}">
<my:DataGrid.RowDetailsTemplate>
<DataTemplate>
<my:DataGrid Name="dataGrid2" ItemsSource="{Binding Path=DetailItems}"></my:DataGrid>
</DataTemplate>
</my:DataGrid.RowDetailsTemplate>
</my:DataGrid>
</Grid>
编辑:要根据 DataGrid 单元格值搜索数据库,您必须将此值放入 ViewModel。为此,请创建一个属性(在我的示例中ProductName
)并将其绑定到 DataGridColumn 的 Binding 属性 (Mode=TwoWay)。然后,您可以拥有一个包含所有产品的私有字段,并在 dataGrid2 ItemsSources 集合中过滤此字段:
public class DataGrid1SourceItem
{
private List<DetailItems> _allDetailItems = new List<DetailItems>();
public IEnumerable<DetailItem> DetailItems
{
get { return _allDetailItems.Where(item => item.Name == ProductName); }
}
public DataGrid1SourceItem()
{
// load your products into _allDetailItems
}
private string _productName;
public string ProductName
{
get { return _productName; }
set
{
_productName= value;
OnPropertyChanged("ProductName");
OnPropertyChanged("DetailItems");
}
}
}