WPF实现DataRowTemplate内无限嵌套DataGrid遇显示异常求助
问题:实现DataGrid无限嵌套时运行异常求助
我希望在DataRowTemplate中实现无限嵌套的DataGrid,点击某一行时能显示下一级DataGrid,以此类推。我的主类是继承自BaseViewModel的CustomTable,该类提供PropertyChanged事件用于更新视图。以下是我的C#代码和XAML代码,但运行后显示异常(见附图),参考相关资料后仍无法排查问题,特此求助。
C#代码
public class CustomTable : BaseViewModel { private ObservableCollection<DataTable> _main; public ObservableCollection<DataTable> Main { get { return _main; } set { _main = value; RaisePropertyChanged(); } } private CustomTable _child; public CustomTable Child { get { return _child; } set { _child = value; RaisePropertyChanged(); } } private DataRowView _selectedItem; public DataRowView SelectedItem { get { return _selectedItem; } set { _selectedItem = value; Child = new CustomTable(); RaisePropertyChanged(); } } private ContentControl _tableCollection; public ContentControl TableCollection { get { return _tableCollection; } set { _tableCollection = value; RaisePropertyChanged(); } } public CustomTable() { Main = new ObservableCollection<DataTable>(); Main.Add(someRandomTable()); TableCollection = new ContentControl(); TableCollection.Content = Main; } private DataTable someRandomTable() { 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); table.Rows.Add(53, "ACC", "Foobar", DateTime.Now); return table; } }
XAML代码
<Window.DataContext> <local:CustomTable/> </Window.DataContext> <Window.Resources> <DataTemplate x:Key="Nested"> <ItemsControl ItemsSource="{Binding DataContext.Tables, RelativeSource={RelativeSource AncestorType=DataGrid, Mode=FindAncestor}}"> <ItemsControl.ItemTemplate> <DataTemplate> <DataGrid CanUserAddRows="False" RowDetailsTemplate="{DynamicResource Nested}" ItemsSource="{Binding Main}" AutoGenerateColumns="True" > </DataGrid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DataTemplate> </Window.Resources> <ScrollViewer> <ScrollViewer.Resources> <DataTemplate DataType="{x:Type local:CustomTable}"> <StackPanel> <ItemsControl ItemsSource="{Binding Path=Main}"> <ItemsControl.ItemTemplate> <DataTemplate> <DataGrid SelectedItem="{Binding SelectedItem, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor,AncestorType=ItemsControl}}" CanUserAddRows="False" ItemsSource="{Binding}" AutoGenerateColumns="True" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> <Expander Header="Child" Margin="10" IsExpanded="True" x:Name="child"> <ContentControl Content="{Binding Child}"/> </Expander> </StackPanel> <DataTemplate.Triggers> <DataTrigger Binding="{Binding Child}" Value="{x:Null}"> <Setter TargetName="child" Property="Visibility" Value="Collapsed"/> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> </ScrollViewer.Resources> <ContentControl Content="{Binding TableCollection}"/> </ScrollViewer>
内容的提问来源于stack exchange,提问作者user18091434
相关产品推荐
相关产品推荐

