【问题标题】:Xamarin Forms ListView CheckmarkXamarin 表单 ListView 复选标记
【发布时间】:2018-03-18 04:19:51
【问题描述】:

我正在尝试在 Xamarin 表单中实现 ListView。我们可以检查或选择我们想要的项目的列表。我想要一次选择一个项目。

我的 xaml 文件:

ListView x:Name="listview" ItemSelected="OnItemSelected" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal">
                        <StackLayout Padding="20,0,0,0"  VerticalOptions="Center"  Orientation="Vertical">
                            <Label Text="{Binding .}" YAlign="Center" FontSize="Medium"   />
                        </StackLayout>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我的 xaml.cs 文件:

    public void OnItemSelected (object sender, SelectedItemChangedEventArgs e) {
        if (e.SelectedItem == null) return; 

        // add the checkmark in the event because the item was clicked
       // be able to check the item here

        DisplayAlert("Tapped", e.SelectedItem + " row was tapped", "OK");
        ((ListView)sender).SelectedItem = null;
    }

有更好的方法吗?

我想要这样的东西,没有字母和搜索菜单:

【问题讨论】:

    标签: c# listview xamarin xamarin.ios


    【解决方案1】:

    看看这个https://github.com/ricardoromo/Listview-Multiselect,我制作了这个示例来模拟 miltiselect 列表视图。

    【讨论】:

      【解决方案2】:

      您可以尝试使用 XLabs 复选框或 radioButton 控件,Here 是控件示例列表,您只需通过 NuGet 管理器下载包即可。

      如果您只需要检查 1 个项目,请在您的点击事件中在项目被点击后执行操作。这是一个例子:

              async void FriendListView_ItemTapped(object sender, ItemTappedEventArgs e)
              {           
                  var el = e.Item as ProfileItem;
                  SelectedItem = el;
                  if (e.Item != null)
                  {
                     await Navigation.PushAsync(new FriendProfile(el));
                  }
                  ((ListView)sender).SelectedItem = null; // de-select the row
              }
      

      【讨论】:

      • 我会接受这个解决方案,因为我知道它行得通,但我用另一种方式来做。
      • 您介意发布您的解决方案吗?我正在尝试解决同样的问题。谢谢!我不想使用复选框控件,因为对于此应用程序,如果未选中复选框,则该复选框应该是完全不可见的。
      • 嗨@KarenCate 我没有代码中的解决方案。您可以尝试使用 ObservableCollection 和 TwoWay 可绑定属性,因此当您点击 ListView 中的某个项目时,您可以更改状态让我们说 bool isSelected = true/false。没有自定义渲染器不容易的部分是 viewCell 的选定状态,比如它的背景或其他东西。
      • @karenCate 你会发现这个很有用forums.xamarin.com/discussion/17885/…
      • 感谢 Ingenator。我最终确实让它工作了。我缺少的重要部分是实现 OnPropertyChanged。我在想 ObservableList 处理了对数据的更改,因此当我更改该列表的一个元素时,它会将更改传播到屏幕。这只是部分正确。如果我要从列表中添加/减去项目,将处理这些更改。但是,它不会“观察”项目本身内部的变化。这篇文章很有帮助:stackoverflow.com/questions/25004275/…
      【解决方案3】:

      我已经在 xamarin 表单中尝试了 Multiselection 列表视图,并且它适用于 iOS 和 Android。

      这花了我一些时间,所以我写了一篇关于整个原型的博客。你可以在这里找到它:

      http://androidwithashray.blogspot.com/2018/03/multiselect-list-view-using-xamarin.html

      该博客为您提供了有关使用复选框创建 Listview 和选择多个项目的完整信息。希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-12
        • 1970-01-01
        • 2018-03-11
        • 2020-08-04
        • 2018-08-13
        • 2016-10-10
        • 2018-03-08
        相关资源
        最近更新 更多