Как установить родительский флажок, управляющий дочерним флажком UWP c# - PullRequest
0 голосов
/ 12 января 2020

У меня есть это в моей программе uwp:

enter image description here

Я хочу это так:

  • Если родитель флажок установлен, все дети тоже.
  • Если флажок родительского элемента снят, все дети тоже.
  • Если флажки всех детей установлены, родитель также будет проверять.
  • Если ни один из дочерних флажков не отмечен, то родительский флажок проверяться не будет.

Мой текущий код может обрабатывать первые три, однако, когда я отменяю проверку одного из дочерних элементов, непроверенная операция для родителя активируется, и это снимает флажок со всех дочерних элементов.

Флажки ограничены булевыми элементами с одинаковыми именами.

Проверяемый код:

private void IsChecked(object sender, RoutedEventArgs e)
{
    CheckBox checkBox = sender as CheckBox;

    if (checkBox.Name == "chkWeekday")
    {
        Monday = true;
        Tuesday = true;
        Wednesday = true;
        Thursday = true;
        Friday = true;
    }
    else
    {
        switch (checkBox.Name) // Handles data not updating yet
        {
            case "chkMonday":
                Monday = true;
                break;
            case "chkTuesday":
                Tuesday = true;
                break;
            case "chkWednesday":
                Wednesday = true;
                break;
            case "chkThursday":
                Thursday = true;
                break;
            case "chkFriday":
                Friday = true;
                break;
        }
        if (Monday && Tuesday && Wednesday && Thursday && Friday)
        {
            Weekday = true;
        }
        break;
    }
}

Не проверяйте код:

private void IsUnchecked(object sender, RoutedEventArgs e)
{
    CheckBox checkBox = sender as CheckBox;

    if (checkBox.Name == "chkWeekday")
    {
        Monday = false;
        Tuesday = false;
        Wednesday = false;
        Thursday = false;
        Friday = false;
    }
    else
    {
        Weekday = false; //<============================================ This is why it un-checks all
        switch (checkBox.Name) // Handles data not updating yet
        {
            case "chkMonday":
                Monday = false;
                break;
            case "chkTuesday":
                Tuesday = false;
                break;
            case "chkWednesday":
                Wednesday = false;
                break;
            case "chkThursday":
                Thursday = false;
                break;
            case "chkFriday":
                Friday = false;
                break;
        }
        break;
    }
}

Есть ли способ сделать это более эффективно / таким образом, чтобы это работало.

1 Ответ

1 голос
/ 13 января 2020

Лучше не подписываться на события Checked и Unchecked, когда вы устанавливаете свойство IsChecked, оно всегда вызывает два события, о которых было бы неудобно судить. В этом случае вы можете просто подписаться на событие Click для ваших CheckBoxs. Например:

private void MyCheckBox_Click(object sender, RoutedEventArgs e)
{
    CheckBox checkBox = sender as CheckBox;

    if (checkBox.Name == "chkWeekday" && checkBox.IsChecked == true)// First demand
    {
        chkTuesday.IsChecked = chkWednesday.IsChecked = chkThursday.IsChecked = true;
    }
    else if (checkBox.Name == "chkWeekday" && checkBox.IsChecked == false) // Second demand
    {
        chkTuesday.IsChecked = chkWednesday.IsChecked = chkThursday.IsChecked = false;
    }
    else if (chkTuesday.IsChecked == true && chkWednesday.IsChecked == true && chkThursday.IsChecked == true) //Third demand
    {
        chkWeekday.IsChecked = true;
    }
    else //Fourth demand
    {
        chkWeekday.IsChecked = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...