如果未选中,则复选框的值保持为true

时间:2020-05-12 10:42:07

标签: xamarin.forms

我有5个复选框,其中一个默认设置为true,其他设置为false。我在列表中收集用户决定,然后执行操作并在构造函数中清除列表。但是,即使我未选中,默认情况下值为true的复选框也位于列表中。因此,我选择一项,并且列表应仅包含一项,但它污染了设置为true的一项,而我选择的一项则是如此。我会在每次选择之前清除该列表,但我需要该列表以容纳更多可能性。 xaml

<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();

        }

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我已经检查了您的示例,您可以像下面的

那样改善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的答案是正确的,您可以检查一下。