You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin ListView 实现全选复选框同步更新UI问题求助

问题根源

  1. Company模型类的IsChecked属性未实现属性变更通知,修改值后UI无法收到更新通知,所以不会刷新
  2. 全选复选框缺少对应的绑定属性和状态同步逻辑

修改步骤

1. 调整Company模型类

让Company继承BaseViewModel,修改IsChecked属性实现变更通知:

public class Company : BaseViewModel
{
    private bool _isChecked;
    public bool IsChecked
    {
        get => _isChecked;
        set => SetProperty(ref _isChecked, value);
    }

    // 其他原有属性(Name等)保留即可
}

2. SyncViewModel增加全选控制属性

新增IsSelectAll属性,值变更时同步所有列表项的选中状态:

public class SyncViewModel : BaseViewModel
{
    private bool _isSelectAll;
    public bool IsSelectAll
    {
        get => _isSelectAll;
        set
        {
            if (SetProperty(ref _isSelectAll, value))
            {
                foreach (var company in CompaniesCollection)
                {
                    company.IsChecked = value;
                }
            }
        }
    }

    // 原有代码保持不变
}

3. 修改XAML全选复选框绑定

移除原来的CheckedChanged事件,绑定到新增的IsSelectAll属性:

<CheckBox x:Name="SelectAll" Color="Blue" IsChecked="{Binding IsSelectAll}"  />

可选:实现子项反向同步全选框

如果需要实现手动选中所有子项时自动勾选全选框、取消任意子项时自动取消全选框的效果,在SyncViewModel中新增子项属性变更监听逻辑:

public async Task InitializeData()
{
    var wellDataStore = new WellDataStore();
    var companies = await wellDataStore.GetAllGroups();
    if (companies != null)
    {
        CompaniesCollection.Clear();
        foreach (var company in companies)
        {
            company.PropertyChanged += OnCompanyPropertyChanged;
            CompaniesCollection.Add(company);
        }
    }
}

private void OnCompanyPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == nameof(Company.IsChecked))
    {
        IsSelectAll = CompaniesCollection.All(c => c.IsChecked);
    }
}

优化提示

如果CompaniesCollection会动态增删项,需要额外监听ObservableCollection的CollectionChanged事件,给新增的项绑定PropertyChanged监听、给移除的项解绑监听,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Raluca Micu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:39:01