在MultiSelectListPreference

时间:2017-04-01 17:40:50

标签: c# android xamarin

我在我的axml文件中定义MultiSelectListPreference,如下所示:

 <MultiSelectListPreference
        android:title="Title"
        android:summary="Sum"
        android:key="dutyMarks"
        android:entries="@array/array_marks"
        android:entryValues="@array/array_marksValues">
 </MultiSelectListPreference>

如何检查/阅读代码中的复选框?

我尝试通过PreferenceChange事件获取检查值:

preference change

选中的值会出现在那里,但我不知道如何获取它们......

3 个答案:

答案 0 :(得分:1)

  

这也是我的第一个想法,但是e.NewValue并没有包含&#39; GetEnumerator&#39;的公开定义。

我们可以在代码中简单地将e.NewValueobject投射到IEnumerable,例如:

private void PreferenceChange(object sender, Preference.PreferenceChangeEventArgs e)
{
    var selections = e.NewValue as IEnumerable;
    if (selections != null)
    {
        foreach (var selection in selections)
        {
            Console.WriteLine(selection);
        }
    }
}

答案 1 :(得分:0)

因为e.NewValue是一个HashSet,你应该能够遍历它

foreach (string x in e.NewValue) {
  // do whatever you need to do with each value x here
}

答案 2 :(得分:0)

如果有人偶然发现了这个问题,我就是这样解决的:

读取(异步部分非常难看,但我不知道如何添加'preferenceChangeD'事件)

private async void preferenceChange(object sender, Preference.PreferenceChangeEventArgs e)
{
     await System.Threading.Tasks.Task.Delay(100);

     List<string> sList = new List<string>();
     ICollection<string> selectedValues = mslp_dutyMarks.Values;
     foreach(string x in selectedValues)
          sList.Add(x);
}

<强>写

mslp_dutyMarks.Values = new List<string> { "A", "B", "C" };