Правильный способ привязки к флажкам для многих параметров

У меня есть страница с вариантами. Для простоты я сократил это до флажков, которые включают / отключают фрукты. Можно выбирать между несколькими фруктами, и количество фруктов может меняться со временем. Также существует еще одна опция, которая быстро фильтрует фрукты. Настройки сохраняются и извлекаются из 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?


person Lars Cardon    schedule 15.11.2018    source источник
comment
Возможно, вы столкнулись с этой ошибкой: github.com/aspnet/Blazor/issues/1490 а нужно ждать релиза 0.7?   -  person Flores    schedule 15.11.2018