<Window x:Class="WpfComboBoxBindingTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfComboBoxBindingTest" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit" Loaded="OnLoaded" Title="Window1" Height="300" Width="300"> <StackPanel> <Grid> <ComboBox Name="comboBox" IsEditable="False" VerticalContentAlignment="Top" SelectionChanged="OnSelected" ItemsSource="{Binding Path=Tables}"> <ComboBox.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Vertical" VerticalAlignment="Top" /> </ItemsPanelTemplate> </ComboBox.ItemsPanel> <ComboBox.ItemTemplate> <DataTemplate> <dg:DataGrid VerticalAlignment="Top" AutoGenerateColumns="True" ItemsSource="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> </Grid> </StackPanel></Window>
using System.Windows;using System.Windows.Controls;using System.Data;namespace WpfComboBoxBindingTest{ public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void OnLoaded(object sender, RoutedEventArgs e) { DataSet ds = new DataSet(); DataTable dt1 = new DataTable(); dt1.Columns.Add("Column1"); dt1.Columns.Add("Column2"); DataRow dr1 = dt1.NewRow(); dr1[0] = "Bob"; dr1[1] = "Smith"; dt1.Rows.Add(dr1); DataTable dt2 = new DataTable(); dt2.Columns.Add("Column1"); dt2.Columns.Add("Column2"); DataRow dr21 = dt2.NewRow(); dr21[0] = "Jack"; dr21[1] = "Smith"; DataRow dr22 = dt2.NewRow(); dr22[0] = "Jack"; dr22[1] = "Smith"; dt2.Rows.Add(dr21); dt2.Rows.Add(dr22); ds.Tables.Add(dt1); ds.Tables.Add(dt2); comboBox.DataContext = ds; } private void OnSelected(object sender, SelectionChangedEventArgs e) { ComboBoxItem item = comboBox.ItemContainerGenerator.ContainerFromIndex(comboBox.SelectedIndex) as ComboBoxItem; if (item!=null) { //get the DataGrid and then get the selected row item } } }}