AutoGenerateColumnsを使用してFlexGrid for Silverlightにデータを表示する

AutoGenerateColumns機能を使用してFlexGridデータを表示してみます。
最初にFlexGridにセットするデータクラスを作成します。

/// <summary>
/// FlexGridのItemsSourceにセットする用のデータクラス
/// </summary>
public class DummyData
{
    /// <summary>サンプルデータを生成します。</summary>
    /// <returns></returns>
    public static IEnumerable<DummyData> CreateSample()
    {
        var result = new List<DummyData>();
        Random r = new Random();
        for (int i = 0; i < 100; i++)
        {
            result.Add(new DummyData
            {
                Name = "Name" + i,
                Age = r.Next(0, 100)
            });
        }
        return result;
    }

    public string Name { get; set; }
    public int Age { get; set; }
}

XAMLでFlexGridを設定します。

<UserControl x:Class="FlexGridSample1.MainPage"
    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"
    xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <c1:C1FlexGrid x:Name="FlexGrid" />
    </Grid>
</UserControl>

ビハインドコードでFlexGridのItemsSourceにデータをセットします。

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        // FlexGridにデータをセット
        this.FlexGrid.ItemsSource = DummyData.CreateSample();
    }
}

これを実行するとこんな感じになります。

DisplayAttributeには対応していない

SilverlightのDataGridの場合DisplayAttributeを使うと列ヘッダーに表示する値を設定できます。

public class DummyData
{
    /// <summary>サンプルデータを生成します。</summary>
    /// <returns></returns>
    public static IEnumerable<DummyData> CreateSample()
    {
        var result = new List<DummyData>();
        Random r = new Random();
        for (int i = 0; i < 100; i++)
        {
            result.Add(new DummyData
            {
                Name = "Name" + i,
                Age = r.Next(0, 100)
            });
        }
        return result;
    }

    [Display(Name = "名前")]
    public string Name { get; set; }

    [Display(Name = "年齢")]
    public int Age { get; set; }
}

このクラスのリストをFlexGridに設定してみましたが、ヘッダー列の文字列は変わりませんでした。FlexGridはDisplayAttributeに対応していないようです。残念。

列ヘッダーの文字列を変更する。

FlexGridで列ヘッダーの文字列を変更する場合、直接カラムインスタンスを操作するようです。

// FlexGridにデータをセット
this.FlexGrid.ItemsSource = DummyData.CreateSample();

// 列ヘッダーの文字列を変更する 
this.FlexGrid.Columns[0].Header = "名前";
this.FlexGrid.Columns[1].Header = "年齢";