【问题标题】:xamarin listview get selected itemxamarin listview 获取所选项目
【发布时间】:2019-01-22 14:14:54
【问题描述】:

无法找到从 ListView 获取项目的正确方法。

我的 XAML 绑定:

            <ListView x:Name="MyListView" ItemTapped="MyListView_ItemTapped" HasUnevenRows="True">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>

                            <Label Text="{Binding Name}"></Label>
                            <Label Text="{Binding Email}"></Label>
                            <Image Source="{Binding PhotoUrl}" WidthRequest="20" HeightRequest="20"></Image>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

所有数据都显示出来并且工作正常。类称为论坛:

    [JsonProperty("results")]
    public List<Result> Results { get; set; }

    public class Result
    {
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("email")]
        public string Email { get; set; }
        [JsonProperty("photoUrl")]
        public string PhotoUrl { get; set; }
    }

我已经创建了 MyListView_ItemTapped 函数,现在,我试图在点击项目时显示它的名称,但不确定什么是正确的方法。而且我一直认为我只是将一些随机的东西boding放在一起,直到我得到一些东西。

        private void MyListView_ItemTapped(object sender, ItemTappedEventArgs e)
    {

        var index = forums.Results.IndexOf(e.Item as Forums.Result);
        DisplayAlert("Alert", forums.Results[index].Name, "OK");

    }

所以,如果有人能指出更好的方向,甚至给出几个更好的例子,或者只是解释应该如何做。

【问题讨论】:

  • 为什么进出e.Results就用e.Item.Name,e.Item as Forums.Result反正
  • 不能这样做。 e.item 只有 (getHash, equals, getType, tostring())
  • 你需要把它转换成Forums.Result,e.item是被点击的项目,应该是Result

标签: c# xamarin.forms


【解决方案1】:

只需将 e.Item 转换为正确的类型

var item = e.Item as Forums.Result;

// then use item.Name, etc...

【讨论】:

    【解决方案2】:

    您还可以使用选定的项目属性 &lt;ListView **SelectedItem="{Binding Result, Mode=TwoWay}"&gt;**

    后面的代码:

    `私有结果_result;

    public Result Result
    {
        get { return _deviceSession; }
        set
        {
            SetProperty(ref _deviceSession, value);
        }
    }`
    

    您可以从这个类对象中获取所有数据

    【讨论】:

      【解决方案3】:

      您可以投射到正确的类

      private void MyListView_ItemTapped(object sender, ItemTappedEventArgs e)
          {
      
              var index = forums.Results.IndexOf(e.Item as Forums.Result);
              var selectedItem = (Forums.Result)e.Item;
              if(selectedItem != null)
              {
                 DisplayAlert("Alert", selected|Item.Name, "OK");
              }
      
          }
      

      哦,如果你想删除选定项效果只是

      if (sender is ListView lv) lv.SelectedItem = null;
      

      【讨论】:

        猜你喜欢
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多