xamarin.forms - 未选中时复选框的值保持为真
问题描述
我有 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();
}
我该怎么办?
解决方案
我已经检查了您的示例,您可以通过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 的回答是正确的,你可以检查一下。
推荐阅读
- mysql - 如何用sql搜索字母'å'
- python - 在已经存在的多对多中实现“通过”
- r-exams - 使用 mathml 转换器将粗体数学字符转换为 moodle
- reactjs - Gatsby:GraphQL 无法查询类型 \"Query\" 上的字段 \"allMarkdownRemark\"
- octave - 如何将 RGB 颜色分配给 Octave 中的散点图?
- java - 如何使用 HazelcastJsonValue 聚合?
- c++ - GCOV - 在不同文件夹中生成的 gcda 文件
- cron - 为什么我在 cron 中启动时 WebKit 不工作,但在终端中启动时工作?
- informatica - 如何将高级过滤表达式添加到 Informatica Data Integration Hub
- swift - 如何在 UIImage 上描边?