Comment voulez-vous faire bonne liaison et la mise à jour de Xamarin.Les Formes ListView?

En utilisant le pattern MVVM, j'ai un Modèle, ViewModel et de la Vue, qui contient un contrôle ListView. La liste est liée à un membre du ViewModel qui est une ObservableCollection de la classe du Modèle. Je peux obtenir la liaison pour l'affichage initial de travail et que vous pouvez mettre à jour les propriétés de la classe du Modèle pour la ligne appropriée à agir sur l'opinion, mais je ne peux pas obtenir le point de vue de l'actualiser, de l'extraction de données à partir de la classe de Modèle dans l'ObservableCollection. La liste de classe ne contient pas de méthode d'invalider ou de forcer un rafraîchissement, ce qui permettrait de répondre à ma question. Comment puis-je obtenir la liste pour se rafraîchir après la mise à jour des données sur le Modèle?

Voici un exemple simple de ce que je suis en train de faire: Chaque ligne contient un Bouton et Étiquette. En cliquant sur un bouton, je peux mettre à jour l'étiquette, qui sera reflété sur l'écran. Ce que je dois faire est de mettre à jour le Modèle, ce qui devrait forcer une mise à jour de la vue. Cependant, je ne peux pas obtenir que cela fonctionne. Dans une application réelle, la mise à jour du Modèle va être dans une couche de logique métier, pas dans la vue, après quoi j'ai besoin pour forcer l'actualisation de la liste.

Exemple De Code:

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;
}
}
}
InformationsquelleAutor Ken K | 2014-07-28