首页 > 解决方案 > 未选中时复选框的值保持为真

问题描述

我有 5 个复选框,其中一个默认设置为 true,其他设置为 false。我在列表中收集用户决策,然后执行操作并清除构造函数中的列表。但是,即使我取消选中它,默认情况下值为 true 的复选框也在列表中。所以我选择了一项,列表应该只包含一项,但它包含设置为 true 的一项和我选择的一项,所以两个。我会在每次选择之前清除列表,但我需要列表来容纳更多可能性。xml

<Checkbox  x:Name="AllCheckBox"
IsChecked="{Binding FilterAllItems, Mode=TwoWay}"
HorizontalOptions="Start" />
<Checkbox  x:Name="AllCheckBox"
IsChecked="{Binding FilterBeginnerItems, Mode=TwoWay}"
HorizontalOptions="Start" />

View Model

 private bool _filterAllItems =  true;
private bool _filterBeginnerItems = false;

  public bool FilterAllItems
        {
            set
            {

                _filterAllItems = value;

                NotifyPropertyChanged("FilterAllItems");
                if (FilterAllItems == true)
                {
                    FilterBeginnerItems = false;

                    UserDecision.Add(_parentCategoryId = -1);

                }
           }
            get => _filterAllItems;
        }
 public bool FilterBeginnerItems
        {
            set
            {

                _filterBeginnerItems = value;

                NotifyPropertyChanged("FilterBeginnerItems");

                if (_filterBeginnerItems == true)
                {
                    FilterAllItems = false;

                    UserDecision.Add(_parentCategoryId = 1);

                }

            }
            get => _filterBeginnerItems;
        }
   public FilterArticlesForPurchaseViewModel(INavigation navigation)
            : base()
        {

            Task.Run(async () => await LoadAllDataForArticlesAndCategories()).Wait();

            FilterItemsCommand = new Command(async () => navigation.PushAsync(new ArticlesForPurchaseFiltered()));
            UserDecision.Clear();

        }

我该怎么办?

标签: xamarin.forms

解决方案


我已经检查了您的示例,您可以通过FilterViewModel以下方式改进代码

public  bool FilterAllItems
        {
            set
            {

                _filterAllItems = value;
                OnPropertyChanged();

                if (FilterAllItems == false)
                {
                    if (UserDecision.Contains(_parentCategoryId = -1))
                    {
                        UserDecision.Remove(_parentCategoryId = -1);
                    }
                }

                if (FilterAllItems == true)
                {
                    FilterBeginnerItems = false;
                    FilterIntermediateItems = false;
                    FilterUpperIntermediateItems = false;
                    FilterAdvancedItems = false;
                    if (!UserDecision.Contains(_parentCategoryId = -1))
                    {
                        UserDecision.Add(_parentCategoryId = -1);
                    }


                    if (UserDecision.Contains(_parentCategoryId=1))
                    {
                        UserDecision.Remove(_parentCategoryId = 1);
                    }
                    if (UserDecision.Contains(_parentCategoryId = 2))
                    {
                        UserDecision.Remove(_parentCategoryId = 2);
                    }
                    if (UserDecision.Contains(_parentCategoryId = 3))
                    {
                        UserDecision.Remove(_parentCategoryId = 3);
                    }
                    if (UserDecision.Contains(_parentCategoryId = 4))
                    {
                        UserDecision.Remove(_parentCategoryId = 4);
                    }

                }

            }
            get => _filterAllItems;
        }

在其他来源中FilterBeginnerItems

set
{
  _filterBeginnerItems = value;
   OnPropertyChanged();

   if (_filterBeginnerItems)
   {
       FilterAllItems = false;
       UserDecision.Add(_parentCategoryId = 1);
       if (UserDecision.Contains(_parentCategoryId = -1))
       {
           UserDecision.Remove(_parentCategoryId = -1);
       }

    }

}

您的问题与最后一个线程非常相似。@Leon 的回答是正确的,你可以检查一下。


推荐阅读