我想知道如何在项目点击事件时,在ListView - ViewCell中切换当前的复选框。
<ListView x:Name="listViewCities"
ItemSelected="ListViewCities_ItemSelected"
ItemTapped="ListViewCities_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<CheckBox x:Name="chkSelectedCity" />
<Label Text="{Binding Name}"
FontSize="Medium"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
下面是我的 item tapped 事件,我想知道如何在我的 ListView - ViewCell 事件中切换当前的复选框。
private void ListViewCities_ItemTapped(object sender, ItemTappedEventArgs e)
{
//Here i want to toggle the current check box as true
//something like chkSelectedCity.checked = true;
}
你可以使用 MVVM 为ListView绑定一个ViewModel,当模型的数据发生变化时。界面 会随之更新。
如创建一个 细胞类 如下所示。
public class CellClass : INotifyPropertyChanged
{
public string Name { set; get; }
private bool selected { get; set; }
public bool Selected
{
set
{
if (selected != value)
{
selected = value;
OnPropertyChanged("Selected");
}
}
get
{
return selected;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
然后设置一些数据,用于 CellClass
在一个新创建的类(ListViewModel)中。
public class ListViewModel
{
public List<CellClass> cellItems { set; get; }
public ListViewModel()
{
cellItems = new List<CellClass>();
cellItems.Add(new CellClass() { Name = "One", Selected = false });
cellItems.Add(new CellClass() { Name = "Two", Selected = false });
cellItems.Add(new CellClass() { Name = "Three", Selected = false });
cellItems.Add(new CellClass() { Name = "Four", Selected = false });
cellItems.Add(new CellClass() { Name = "Five", Selected = false });
cellItems.Add(new CellClass() { Name = "Six", Selected = false });
}
}
现在 Xaml 代码将如下。
<ListView x:Name="listViewCities"
ItemSelected="listViewCities_ItemSelected"
ItemTapped="ListViewCities_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<CheckBox x:Name="chkSelectedCity"
IsChecked="{Binding Selected}"/>
<Label Text="{Binding Name}"
FontSize="Medium"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在 内容页 能对付 ListViewCities_ItemTapped
的方法和绑定模型 ListView
:
public MainPage()
{
InitializeComponent();
ListViewModel listViewModel = new ListViewModel();
listViewCities.ItemsSource = listViewModel.cellItems;
}
private void ListViewCities_ItemTapped(object sender, ItemTappedEventArgs e)
{
//Here i want to toggle the current check box as true
//something like chkSelectedCity.checked = true;
var model = e.Item as CellClass;
if (model.Selected)
{
model.Selected = false;
}
else
{
model.Selected = true;
}
Console.WriteLine("clicked");
}
负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 效果 :
这是 项目链接示例 以供参考,你有时间可以看看。
给你的模型添加一个bool属性
public bool Selected { get; set; }
然后将您的复选框与之绑定
<CheckBox IsChecked="{Binding Selected}" />
然后在你的处理程序中
private void ListViewCities_ItemTapped(object sender, ItemTappedEventArgs e)
{
var item = (MyClass)e.Item;
item.Selected = !item.Selected;
}