我有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();
}
我该怎么办?
答案 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的答案是正确的,您可以检查一下。