【问题标题】:How to get the id of the toggled switch item in the listview using xamarin forms如何使用 xamarin 表单获取列表视图中切换开关项的 ID
【发布时间】:2019-08-17 21:25:58
【问题描述】:

我有一个列表视图,所有列表视图项都在右端包含一个开关,如下图所示。

Listview Image

当我选择一个项目时,开关会触发 Toggled 事件。我的代码在下面添加:

Xaml:

 <Switch IsToggled="false"  Margin="210,2,2,2" Toggled="Switch_Toggled" />

Xaml.cs:

 private void Switch_Toggled(object sender, ToggledEventArgs e)
    {
       // I need the retail_modified_item_id of the selected item, how I can access that

    }
private void accept(object sender, EventArgs args)
    {
       // fetch all selected items and display success 
        DisplayAlert("Success", "Request Accepted and Updated", "OK");
    }

模型类:

namespace XamNative.Models
{

public class Human
{
    public string name { get; set; }
    public int retail_modified_item_id { get; set; }
    public double old_price { get; set; }
    public double new_price { get; set; }
}
}

当我点击接受按钮时,我需要所有选定商品[item1,item2] 的retail_modified_item_id?

【问题讨论】:

  • 您是否尝试过将sender 转换为Switch,然后访问它的BindingContext。 ListView 自动将BindingContext 设置为项目,因此您应该能够像那样访问它。话虽这么说,我更喜欢使用 Commands 和 CommandParameters,但在 ListView 的情况下,您需要做一些工作以使其正确。给你指明方向的东西:stackoverflow.com/a/53671688/10608418
  • {Binding .} 用于绑定 .cs 文件中的元素吗?现在我想要切换项目 id ..
  • 是的,它绑定了来自ItemsSource 的项目,因此如果该项目具有 Id 属性,您应该能够访问它。

标签: listview xamarin.forms uiswitch


【解决方案1】:

获取开关的BindingContext,并从中获取您需要的ID

// list to hold all selected values
List<string> selected = new List<string>();

private void Switch_Toggled(object sender, ToggledEventArgs e)
{
   // I need the retail_modified_item_id of the selected item, how I can access that

   var switch = (Switch)sender;
   var human = (Human)switch.BindingContext;
   var id = human.retail_modified_item_id;

   // add/remove id from selected based on IsToggled
   if (switch.IsToggled) {
     if (!selected.Contains(id)) selected.Add(id);
   } else {
     if (selected.Contains(id)) selected.Remove(id);
   }
}

【讨论】:

  • 这个 id 是否有完整的选定值?这个怎么打印?
  • id 将具有 id。 human 将是整个选定对象。我不确定您所说的“打印”是什么意思?您可以使用 DisplayAlert 向用户显示消息,或使用 Console.Writeline 将其输出到控制台。
  • 我想要所有选定的值,但这个 id 只返回我当时选择的值。我必须将所有选定的值发送到 accept() 函数
  • 好吧,那么你应该在你原来的问题中问过这个问题。创建一个数组或其他数据结构来维护所有选定元素的列表很简单。或者您可以使用数据绑定在您的模型中跟踪它们。
  • 我添加了。我从 api 获取数据,所以 id 与 API 绑定。你的意思是不是 id 我必须创建一个数组 .. 对吗?但是如何获取数组长度并获取所有值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多