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);
        }