The initial content page that was created when we created the XForms projects was done in code. Rather than doing the layout in code, I prefer to work in XAML – not only does this make the design more declarative, it is also miles easier to data binding. I’ll start by creating a new Forms Xaml Page.
Next we’ll add some XAML to the page (similar to what we added to the Windows MainPage):
<?xml version=”1.0″ encoding=”utf-8″ ?>
<ContentPage http://xamarin.com/schemas/2014/forms"”>http://xamarin.com/schemas/2014/forms”
“>“
x_Class=”RealEstateInspector.XForms.MainPage”>
<ListView ItemsSource=”{Binding Properties}”>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Label Text=”{Binding Address}” />
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
And in the code behind for the MainPAge we’ll create, assign and load data into the MainViewModel:
protected async override void OnAppearing()
{
base.OnAppearing();
var vm = new MainViewModel();
BindingContext = vm;
await vm.LoadPropertyData();
}
And of course I need to update the code in App.cs to use the new XAML MainPage, rather than the code created ContentPage:
public App()
{
// The root page of your application
MainPage =new MainPage();
}
When you go to run this you’re likely to see errors due to lack of references for the SQLite extensions. Most references will get added if they are used by referenced libraries. What makes SQLite different is that there are platform specific implementations which are only added to the platform specific project. As such you need to make sure all the client applications have the SQLiteStore NuGet package referenced. I ran into issues applying the NuGet package to the Android project as it seemed to not be able to find the HttpClient NuGet package – I had to add this NuGet package to the Android project first, before applying the SqliteStore NuGet Package.
After doing this I was able to run up the XForms applications on each of the platforms, each displaying the addresses of the properties in my local offline database.