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

バインドしたデータを Converter で変換して表示してみる

.net

はじめに

先日のサンプルのままだと、伝票種の列に数値が表示されても何を示しているのか分からないので、Corn Butter Converter を使って変換してから表示するように修正してみました。

Converter を用意

// 伝票種用コンバータ。
// 数値を文字列に変換します。
[ValueConversion(typeof(int), typeof(string))]
public class SlipKindConverter : IValueConverter
{
    private const int SALES_CREDIT = 1;
    private const int SALES_CASH = 2;
    private const string SALES_CREDIT_TEXT = "掛売";
    private const string SALES_CASH_TEXT = "現金売";

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int slipKind = System.Convert.ToInt32(value);
        switch (slipKind)
        {
            case SALES_CREDIT:
                return SALES_CREDIT_TEXT;
            case SALES_CASH:
                return SALES_CASH_TEXT;
            default:
                return slipKind.ToString();
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // ListView でまだ編集できないので、
        // 逆はサポートしないよ!
        throw new NotImplementedException();
    }
}

XAML を修正

ListView.Resources タグで囲まれた部分に

<!--伝票種用 Converter-->
<ListViewSample:SlipKindConverter x:Key="slipKindConverter"/>

を追加し、伝票種用 CellTemplate を

<!--伝票種セル用テンプレート-->
<DataTemplate x:Key="kindCellTemplate">
    <StackPanel>
        <!--伝票種用の Coverter を指定-->
        <Label Content="{Binding Path=Kind, Converter={StaticResource slipKindConverter}}"/>
        <Label Content="{Binding Path=NoFlag}"/>
    </StackPanel>
</DataTemplate>

実行結果

f:id:griefworker:20081027100356p:image

伝票種のところが「掛売」や「現金売」に変換されていますね。