我有以下XAML代码:
<TabControl Grid.Row="1" x:Name="tabs" ItemsSource="{Binding}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="Visibility" Value="{Binding Visibility}" />
</Style>
</TabControl.ItemContainerStyle>
<TabControl.ContentTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<WrapPanel Grid.Row="0">
<ComboBox VerticalAlignment="Center" HorizontalAlignment="Left" Width="100" ItemTemplate="{StaticResource CCCItemTemplate}" ItemsSource="{Binding Subtypes}" />
<ComboBox VerticalAlignment="Center" HorizontalAlignment="Left" Width="100" ItemTemplate="{StaticResource CCCFileItemTemplate}" ItemsSource="{Binding Files}" />
</WrapPanel>
<DataGrid Grid.Row="1" ItemsSource="{Binding Path=Files}" />
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
使用tabs.DataContext = fileTypes;
通过XAML动态添加标签本身的位置。
每个标签都有自己的DataGrid,与&#34; FileType&#34;相关联。类。
每个FileType类都有一个public ObservableCollection<SecondaryFile> Files { get; set; } = new ObservableCollection<SecondaryFile>();
,每个SecondaryFile都有
public ArrayList Columns { get; set; } = new ArrayList();
...
public string[][] data { get; set; };
是否有通过XAML将列和数据绑定到网格? 请记住TabItems和匹配的DataGrids本身是动态的,列数及其内容也是如此。
我尝试以动态方式为网格命名,因此我可以通过编程方式访问它,但无济于事。
任何建议都非常受欢迎!
谢谢!
答案 0 :(得分:2)
如果我理解正确SecondaryFile
包含这两个字段,其中Columns
包含DataGrid的headers
,data
包含行。
如果是这种情况,并且您希望仅使用xaml代码使用这两个动态填充DataGrid,我建议使用DataTable。为此,您必须省略Columns
和data
,并使用单个DataTable对象,稍后您将ItemSource
绑定到DataGrid
。此外,您需要将DataGrid
的{{1}}属性设置为AutoGenerateColumns
。
创建数据表
True
在xaml中你会有类似
的东西public DataTable table { get; set; }
// Here we create a DataTable
table = new DataTable();
table.Columns.Add("Col1", typeof(int));
table.Columns.Add("Col2", typeof(string));
table.Columns.Add("Col3", typeof(string));
// Here we add DataRows.
table.Rows.Add(1, "john", "doe");
table.Rows.Add(2, "jane", "doe");