読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

WPF

小ネタです。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