У меня есть страница с вариантами. Для простоты я сократил это до флажков, которые включают / отключают фрукты. Можно выбирать между несколькими фруктами, и количество фруктов может меняться со временем. Также существует еще одна опция, которая быстро фильтрует фрукты. Настройки сохраняются и извлекаются из LocalStorage с помощью https://github.com/cloudcrate/BlazorStorage
Насколько я понимаю, привязка может быть привязана только к переменной или свойству, поэтому я не могу:
@{foreach (var fruit in AllFruits) {
<input type="checkbox" bind=@CheckBoxChanged(fruit.Name)>@fruit.Name
}
}
<input type="checkbox" bind=@Checked />Show all yellow fruits
Это тоже не сработает, поскольку все флажки будут переключать одно и то же свойство:
@{foreach (var fruit in AllFruits) {
<input type="checkbox" bind=@CheckBoxEnabled>@fruit.Name
}
}
<input type="checkbox" bind=@Checked />Show all yellow fruits
В итоге я создал компонент, который имеет свойства Name и Enabled, а также событие, указывающее на изменение состояния:
@{foreach (var fruit in AllFruits) {
<Fruit [email protected]
[email protected]
OnSettingsChanged=@((Action<string, bool>) FruitClicked)></Fruit>
}
}
<input type="checkbox" bind=@Checked />Show all yellow fruits
У меня также есть кнопка, которая сохраняет текущие настройки и обработчик события OnSettingsChanged:
<BlazorButton Color="Color.Primary" OnClick=@SaveFruitSettings>Save Changes</BlazorButton>
protected void FruitClicked(string name, bool enabled) {
_fruits.FirstOrDefault(b => b.Name == name).Enabled = enabled;
}
Единый флажок, отключающий / включающий желтые фрукты, используется часто и должен давать эффект напрямую. Таким образом, свойство Checked обращается к локальному хранилищу в get / set. Отдельные плоды меняются не часто, их следует сохранять в локальное хранилище только после нажатия кнопки сохранения.
Эта установка отлично работала в Blaxor 0.5.0, но после обновления до 0.6.0 это не так. Когда установлен флажок желтых фруктов, все отдельные фрукты OnSettingsChanged запускаются после установки с сохраненными значениями из LocalStorage. Цикл foreach для доступа к AllFruits запускается, указывая на то, что вся страница повторно отрисована или что-то подобное.
Я чувствую, что мне не хватает общей картины того, как это сделать. Как показать флажки для нескольких параметров, не создавая для каждого отдельного свойства bool?