xamarin.forms - 如何在listview xamarin表单中实现复选框
问题描述
我正在尝试在列表视图中实现复选框并从所选行中检索数据。我尝试在线搜索,但我没有找到任何合适的资源,并且一些插件已经不再工作了。任何人的任何参考和方法都会非常友好。
解决方案
您可以使用 MVVM 来实现它。这里正在运行 GIF。
首先,您可以创建一个模型。添加您需要的绑定属性。
public class MyModel:BaseViewModel
{
public bool IsChecked { get; set; }
public string Title { get; set; }
}
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var changed = PropertyChanged;
if (changed != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后创建一个 Viewmodel 来弹出数据。
public class MyViewModel
{
public ObservableCollection<MyModel> myModels { get; set; }
public MyViewModel()
{
myModels =new ObservableCollection<MyModel>();
myModels.Add(new MyModel() { IsChecked = false, Title = "test1" });
myModels.Add(new MyModel() { IsChecked = false, Title = "test2" });
myModels.Add(new MyModel() { IsChecked = false, Title = "test3" });
myModels.Add(new MyModel() { IsChecked = false, Title = "test4" });
myModels.Add(new MyModel() { IsChecked = false, Title = "test5" });
}
}
然后创建一个布局来显示数据。
<ListView x:Name="listView" ItemsSource="{Binding myModels}" ItemSelected="listView_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout BackgroundColor="#eee"
Orientation="Vertical">
<StackLayout Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"></CheckBox>
<Label Text="{Binding Title}" TextColor="#f35e20" />
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是布局的背景代码,然后从选定的行中检索数据并创建一个 bindingContext。
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
this.BindingContext = new MyViewModel();
}
private void listView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var myModel=e.SelectedItem as MyModel;
DisplayAlert("title",myModel.Title+" "+myModel.IsChecked,"OK");
}
}
推荐阅读
- python - 如何将数据帧的行迭代成多行句子?
- node.js - 令人难以置信的奇怪木偶行为
- javascript - 单元测试要与 redux-form 一起使用的自定义 Input React 组件失败
- objective-c - 在“id”类型的对象上找不到读取字典元素的预期方法
' - assembly - NASM,如何直接写入硬盘并在实模式下读取
- clojure - 为什么 clojure.set/union 函数接受其他类型的数据作为输入?
- ms-access - Access 中缺少自动编号
- sql - 使用 rownum 的 SQL Server 同行连接不返回任何值
- python - 如何在列表中的列表中获取两个值?
- python - 在 Pandas 分类中,什么是 format="table"?