@nicklayk

Как в WP заблокировать в цикле кнопки на форме?

Имеется форма, есть переменная, нужно в цикле блокировать кнопки в зависимости от значения переменной.

Примерное представление:
for(int i=0;i<value;i++) {
    btn_[i].IsEnabled = false;
}

Как реализовать?
  • Вопрос задан
  • 2671 просмотр
Решения вопроса 1
Vadimyan
@Vadimyan
Программист C#
Ох. Начнём.
1. Правильно ли я понимаю, что кнопки генерируются динамически? Или коллекция btn_[i] заполнена заранее и все кнопки в ней есть?
2. Можно более подробно узнать о сценарии, в котором возникла такая задача? Сейчас неясно в какой момент времени должна происходить смена доступности кнопок.
3. ViewFirst или ViewModelFirst вы используете?

В любом случае, если возникла такая ситуация, то шаблон MVVM уже не соблюдается - представление управляет само собой, а не данные управляют представлением. Тут есть несколько вариантов.
Если использование команд вам не подходит, то в любом случае где-то должна быть та самая переменная со значением, на которую можно забиндиться.
Если переменная не булевого типа, то сделать это можно через конвертер.
Если кнопки генерируются в контейнере элементов в зависимости от наполнения коллекции в VM, то можно прибиндиться к элементу коллекции. Если же для коллекции нужно прибиндиться к внешнему свойству, то подойдёт использование RelativeSource.
Если всё-таки есть переменная в View, которая влияет на доступность кнопок - стоит подумать, как изменить код так, чтобы подобный сценарий не возник. Соблюдать mvvm полностью не всегда просто, но стараться это делать крайне рекомендуется. Что бы там не писали на хабре, но это удобный шаблон, который позволяет не запутаться в коде и вести разработку максимально быстро.

Я бы всё-таки попросил более подробно описать проблему, сейчас я не понимаю даже, в чём именно возникла загвоздка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Не самая лучшая идея. Делайте лучше binding в XAML
Ответ написан
@gleb_kudr
Ну если не хотите через баиндинги делать, то засуньте все кнопки в list и блокируйте их по индексу. Чуток псевдокода.

//Наполняем массив
List<Button> myButtons=new List<Button>();
for(int i=1;i<10;i++){
 var newButton= new Button();
 form1.add(newButton);
 myButtons.add(newButton);
}
//вырубаем кнопки
foreach(Button btn in myButtons){
 if(btn!=null){
  btn.IsEnabled=false;
 }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы