The code I have works, but it appears to me to be a kludgy cut-and-paste solution. I am looking for a more efficient way of coding the XAML so that the Grid does not need defined twice, but with a different background color
The code produces an alternating color background for rows of a ListView. This is a different issue from Alternate row color ListView xamarin forms.
A simplified example of my code:
<ContentPage.Resources>
<DataTemplate x:Key="evenTemplate">
<ViewCell>
<Grid BackgroundColor="White" >
<Label Text="{Binding Data}" />
</Grid>
</ViewCell>
</DataTemplate>
<DataTemplate x:Key="unevenTemplate">
<ViewCell>
<Grid BackgroundColor="Black" >
<Label Text="{Binding Data}" />
</Grid>
</ViewCell>
</DataTemplate>
<local:AlternateColorDataTemplateSelector x:Key="alternateColorDataTemplateSelector"
EvenTemplate="{StaticResource evenTemplate}"
UnevenTemplate="{StaticResource unevenTemplate}" />
</ContentPage.Resources>
<ContentPage.Content>
<ListView ItemTemplate="{StaticResource alternateColorDataTemplateSelector}" />
</ContentPage.Content>
The actual code is much more complicated than this. The problem is that using this design, I have two identical copies of the Grid, with the only difference being the background. The actual code winds up being around 23 lines of XAML duplicated, which causes a nightmare in maintainability--when one thing needs changed, I have to change it in two places (as you can see by the Label).
I tried defining the Grid outside the DataTemplate and binding it to the content of a ContentView, but then the controls inside the grid don't bind to my model (the BindingContext of the ContentPage). In other words, the Label no longer binds to Data. Example below:
<Grid x:Key="mainGrid" >
<Label Text="{Binding Data}" />
</Grid>
<DataTemplate x:Key="evenTemplate">
<ViewCell>
<ContentView Content={StaticResource mainGrid}" BackgroundColor="White" />
</ViewCell>
</DataTemplate>
<DataTemplate x:Key="evenTemplate">
<ViewCell>
<ContentView Content={StaticResource mainGrid}" BackgroundColor="Black" />
</ViewCell>
</DataTemplate>
So, the question becomes, how do I do this, so that the Grid only needs defined once, but binds correctly and I have alternating row colors?