かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WPFのDataGridにstringの2次元配列をバインドしたい

小ネタです。WPF(に限らずですが)のBindingは、配列の要素にインデックスでアクセスが可能です。 なので、以下のようなBinding式を書くことで、配列を表示することが出来ます。

<Window x:Class="WpfApplication11.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"
        xmlns:local="clr-namespace:WpfApplication11"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid x:Name="DataGrid"
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Col1"
                                    Binding="{Binding [0]}" />
                <DataGridTextColumn Header="Col2"
                                    Binding="{Binding [1]}" />
                <DataGridTextColumn Header="Col3"
                                    Binding="{Binding [2]}" />
                <DataGridTextColumn Header="Col4"
                                    Binding="{Binding [3]}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

DataGridのItemsSourceに以下のように適当にデータを流し込むと

using System.Windows;

namespace WpfApplication11
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.DataGrid.ItemsSource = new[]
            {
                new[] { "A", "B", "C", "D"},
                new[] { "A", "B", "C", "D"},
                new[] { "A", "B", "C", "D"},
                new[] { "A", "B", "C", "D"},
                new[] { "A", "B", "C", "D"},
                new[] { "A", "B", "C", "D"},
            };
        }
    }
}

こんな風に表示されます。

f:id:okazuki:20160209103231p:plain