2017-11-13 18 views
1

datagridの内容に基づいて、たとえばtextblockなどのUIアイテムを設定するにはどうすればよいですか?WPF動的にUIを設定する

例えば、私はdatagridを持っていて、それぞれに特定のヘッダーを持つさまざまな数の列を持っています。テキストの内容を列見出しにして各列に新しいtextblockを作成することは可能でしょうか?

エクセルファイルからデータを取り込んだdatagridの内容に基づいて、列名とチェックボックスのリストを設定しようとしています。

ありがとうございます。

答えて

0

最も簡単な解決策はDataGridColumnsプロパティ

MainWindow.xamlにバインドすることです。そして、あなたが<ListBox.ItemTemplate>を変更することができ

using System.Linq; 

namespace WpfApp1 
{ 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      DataGrid1.ItemsSource = Enumerable.Range(1, 10).ToList(); 
     } 
    } 
} 

<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> 

MainWindow.xaml.cs必要に応じてアイテムの外観を調整します。

+0

DataGridとターゲットコントロール( 'DataGrid's' Columns'にバインドされる)が異なるコントロールにある場合、 'ElementName'マークアップ拡張を介してDataGridにアクセスできないことがあります。その場合は、共有viewmodel/resource経由でバインディングを渡す必要があります。 – Shcherban

関連する問題