¿Cómo se realiza el enlace y la actualización adecuados de Xamarin.Forms ListView?

Usando el patrón MVVM, tengo un Modelo, ViewModel y View, que contiene un ListView. ListView está vinculado a un miembro de ViewModel que es una ObservableCollection de la clase Model. Puedo obtener el enlace para que funcione la visualización inicial y puedo actualizar las propiedades en la clase Modelo para la fila apropiada al actuar en la vista, pero no puedo actualizar la vista, extrayendo datos de la clase Modelo en la Colección Observable. La clase ListView no contiene un método para invalidar o forzar una actualización, lo que resolvería mi problema. ¿Cómo hago para actualizar ListView después de actualizar los datos en el modelo?

Aquí hay un ejemplo simple de lo que estoy tratando de hacer: cada fila contiene un Botón y una Etiqueta. Al hacer clic en un botón, puedo actualizar la etiqueta, que se reflejará en la pantalla. Lo que necesito hacer es actualizar el Modelo, que a su vez debería forzar una actualización de la vista. Sin embargo, no puedo hacer que esto funcione. En una aplicación real, la actualización del Modelo estará en una capa de lógica de negocios, no en la vista, después de lo cual necesito forzar la actualización de ListView.

Código de ejemplo:

using System;
using System.Collections.ObjectModel;
using Xamarin.Forms;

namespace ListViewTest
{   
    public class Model
    {
        public static int ids = 0;
        public Model(string count) 
        {
            Id = +1;
            Count = count;
        }
        public int Id { get; set; }
        public string Count { get; set; }
    }

    public class ModelList : ObservableCollection<Model>
    {
    }

    public class ViewModel
    {
        ModelList list = new ModelList();
        public ModelList ViewModelList
        {
            get { return list; }
            set 
            { 
                list = value; 
            }
        }
    }

    public partial class MainPage : ContentPage
    {   
        public ViewModel viewModel;

        public class DataCell : ViewCell
        {
            public DataCell()
            {
                var Btn = new Button();
                Btn.Text = "Click";
                var Data = new Label();
                Data.SetBinding(Label.TextProperty,"Count");
                Btn.Clicked += (object sender, EventArgs e) => 
                {
                    Model model = (Model)(((Button)sender).Parent.BindingContext);
                    int count = Convert.ToInt32(model.Count);
                    count++;
                    model.Count = count.ToString();

                    // Need to refresh ListView from data source here... How???
                };

                StackLayout s = new StackLayout();
                s.Orientation = StackOrientation.Horizontal;
                s.Children.Add(Btn);
                s.Children.Add(Data);
                this.View = s;
            }
        }

        public MainPage ()
        {
            viewModel = new ViewModel();
            viewModel.ViewModelList.Add(new Model("0"));
            viewModel.ViewModelList.Add(new Model("0"));
            InitializeComponent();
        }

        public void InitializeComponent()
        {
            ListView listView = new ListView
            {
                ItemsSource = viewModel.ViewModelList,
                ItemTemplate = new DataTemplate(() =>
                    {
                        return new DataCell();
                    })
            };
            Content = listView;
        }
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta