我正在开发基于MVVM软件架构模式的wpf应用程序。
我有一个主DataTable
,我直接绑定到DataGrid。我有一个DataTable列表,我想在点击DataGrid
行时显示它们。下面的代码是一个示例代码,只是为了理解它是如何完成的。我的实际项目遵循MVVM,我将在其中应用这个概念。
<Window x:Class="HierDataGrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="Nested">
<ItemsControl ItemsSource="{Binding TableCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</Window.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding TableCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid RowDetailsTemplate="{StaticResource Nested}" ItemsSource="{Binding}" AutoGenerateColumns="True" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
CS档案
public partial class MainWindow : Window
{
public List<DataTable> TableCollection { get; set; }
public MainWindow()
{
InitializeComponent();
TableCollection = new List<DataTable>();
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
TableCollection.Add(table);
TableCollection.Add(table);
TableCollection.Add(table);
this.DataContext = this;
}
}
我能够直接将列表绑定到数据网格,但不能作为datagrid中RowDetailsTemplate的模板,当单击该行时没有任何内容。
答案 0 :(得分:0)
好的,经过尝试,我能够解决它。问题在于DataTemplat
中的绑定<Window.Resources>
<DataTemplate x:Key="Nested">
<ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=TableCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</Window.Resources>