在Xmarin.Forms中的ViewCell中切换CheckBox。

问题描述 投票:0回答:2

我想知道如何在项目点击事件时,在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;
}
checkbox xamarin.forms toggle code-behind
2个回答
1
投票

你可以使用 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");
}

负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 效果 :

enter image description here

这是 项目链接示例 以供参考,你有时间可以看看。


1
投票

给你的模型添加一个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;
}
© www.soinside.com 2019 - 2024. All rights reserved.