public override View GetView( int position, View convertView, ViewGroup parent) { View row; if (convertView == null) { LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService); row = inflater.Inflate(Resource.Layout.TodoItem, null); } else { // Reuse past view row = convertView; } var item = this.GetItem(position); // Hydrate data/event handlers ((TextView)row.FindViewById(Resource.Id.text)).Text = item.Text; var checkBox = (CheckBox)row.FindViewById(Resource.Id.checkBox); checkBox.SetOnCheckedChangeListener(null); if (_itemState.ContainsKey(item.Id)) { checkBox.Checked = _itemState[item.Id]; } else { checkBox.Checked = item.IsChecked; } checkBox.CheckedChange += async delegate( object sender, CompoundButton.CheckedChangeEventArgs e) { var query = new BsonDocument { { "_id", new BsonDocument { { "$oid", item.Id.ToString() } } } }; var update = new BsonDocument { { "$set", new BsonDocument { { "checked", e.IsChecked } } } }; _itemState[item.Id] = e.IsChecked; await _itemSource.UpdateOne(query, update, false); _itemState.Remove(item.Id); }; return(row); }