みかづきメモ

学習したことのメモとか、日記とか、備忘録。

Xamarin.Forms で ListView の DataTemplate を使う

Xamarin.Forms 、UI を共通化できるので便利ではあるのですが、
ところどころ、(少なくとも私にとっては)不可解な部分があるような気がします。

そのうちの一つの、 DataTemplate です。


DataTemplate には、通常 Cell をルート要素として使用します。
簡単なサンプルはこちら

C# コードでのサンプルですが、 XAML でも似たような使い方です。

では、 XAML での使い方。 公式にあるサンプルはこれ。

Cell Appearance - Xamarin

Cell の使い方についてのページですが、

<DataTemplate>
    <ViewCell>
        <StackLayout BackgroundColor="#eee"
        Orientation="Vertical">
            <!-- ... -->
        </StackLayout>
    </ViewCell>
</DataTemplate>

とありますが、これをそのまま実行すると...

System.InvalidCastException: Specified cast is not valid.

と、怒られてしまいます。しまいました。

正しい使い方は

<DataTemplate>
    <ViewCell>
        <ViewCell.View>
            <StackLayout BackgroundColor="#eee"
            Orientation="Vertical">
                <!-- ... -->
            </StackLayout>
        </ViewCell.View>
    </ViewCell>
</DataTemplate>

です。

とりあえず、30分ほど悩んでしまったので、メモしておきます。