为什么布尔值切换为“ true”而不是false?

时间:2019-06-09 21:17:21

标签: c# xamarin.android

在我的listView适配器类中,我有一个委托,将一个功能分配给listview中的每个按钮。此按钮应在我的“ Spices”对象中切换一个名为cupboard的布尔值。第一次单击时起作用,并将其更改为“ true”。但是,它不会再回到假。知道是什么原因导致它不再重新设置为false吗?这是我在这里的第一篇文章,如果重复,我们深表歉意。

我尝试将默认值“ false”更改为具有getter和setter方法,并尝试使用不同的if / else语句来切换布尔值。

这来自GetView()函数内部的自定义listView适配器:

Button AddToCupboard = row.FindViewById<Button>(Resource.Id.AddToCupboard);
//Adds onclick event for "Add to cupboard"

AddToCupboard.Click += delegate
{
    var item = mItems[position].cupboard;
     item = !item;
    Console.WriteLine(item);
};

我的Spice班:

class Spice
{
    public string name { get; set; } 
    public string flavour { get; set; }
    public string picture { get; set; }
    public string substitute { get; set; }
    public string description { get; set; }
    public string uses { get; set; }


    public bool cupboard { get; set; }
    public bool list { get; set; }
}

我希望控制台在两次按下同一按钮时先输出True,然后输出False,但它停留在true

1 个答案:

答案 0 :(得分:0)

之所以会这样,是因为您实际上并没有从Spice对象中更改cupboard的值。

AddToCupboard.Click += delegate
{
    var mItem = mItems[position];
    mItem.cupboard = !mItem.cupboard;
}

在您的示例中,您将cupboard值复制到局部变量,将其从T切换为F,仅此而已。 mItems数组将保持不变,因为所有操作都是在目标变量的副本上完成的。