C# WPF动态填充UI

C# WPF动态填充UI,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,如何根据datagrid的内容填充UI项,例如textblock 例如,如果我有一个datagrid,它的列数不同,每个列都有一个特定的标题。是否可以为每列创建一个新的textblock,并将文本内容作为列标题 我正试图根据我的datagrid的内容填充列名和复选框列表,其中包含从excel文件中拉入的数据 谢谢。最简单的解决方案是绑定到DataGrid的列属性 MainWindow.xaml: <Window x:Class="WpfApp1.MainWindow" xm

如何根据
datagrid
的内容填充UI项,例如
textblock

例如,如果我有一个
datagrid
,它的列数不同,每个列都有一个特定的标题。是否可以为每列创建一个新的
textblock
,并将文本内容作为列标题

我正试图根据我的
datagrid
的内容填充列名和复选框列表,其中包含从excel文件中拉入的数据


谢谢。

最简单的解决方案是绑定到
DataGrid
属性

MainWindow.xaml:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <DataGrid Grid.Column="0" AutoGenerateColumns="False" x:Name="DataGrid1">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Column 1" Width="75" />
                <DataGridTextColumn Header="Column 2" Width="75" />
                <DataGridTextColumn Header="Column 3" Width="75" />
                <DataGridTextColumn Header="Column 4" Width="75" />
            </DataGrid.Columns>
        </DataGrid>
        <ListBox Grid.Column="1" ItemsSource="{Binding ElementName=DataGrid1, Path=Columns}">
            <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type DataGridColumn}">
                    <TextBlock Text="{Binding Path=Header}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

然后,您可以修改
以根据需要调整项目外观。

最简单的解决方案是绑定到
DataGrid
属性

MainWindow.xaml:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <DataGrid Grid.Column="0" AutoGenerateColumns="False" x:Name="DataGrid1">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Column 1" Width="75" />
                <DataGridTextColumn Header="Column 2" Width="75" />
                <DataGridTextColumn Header="Column 3" Width="75" />
                <DataGridTextColumn Header="Column 4" Width="75" />
            </DataGrid.Columns>
        </DataGrid>
        <ListBox Grid.Column="1" ItemsSource="{Binding ElementName=DataGrid1, Path=Columns}">
            <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type DataGridColumn}">
                    <TextBlock Text="{Binding Path=Header}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

然后,您可以修改
以根据需要调整项目外观。

但是,如果您的datagrid和目标控件(将绑定到
datagrid
s
)位于不同的控件上,您可能无法通过
ElementName
标记扩展访问datagrid。如果是这样,您必须通过共享视图模型/资源传递绑定。但是,如果您的datagrid和目标控件(将绑定到
datagrid
s
Columns
)位于不同的控件上,您可能无法通过
ElementName
标记扩展访问datagrid。如果是这样,您必须通过共享视图模型/资源传递绑定。