C# 如何拥有控制子复选框UWP c的父复选框

C# 如何拥有控制子复选框UWP c的父复选框,c#,checkbox,uwp,C#,Checkbox,Uwp,我的uwp计划中有: 我希望这样: 如果选中了“父项”复选框,则所有子项也将被选中。 如果取消选中“父项”复选框,则所有子项也将被选中。 如果选中所有子项复选框,则父项也将选中。 如果未选中任何子项复选框,则不会选中父项。 我的当前代码可以处理前三个,但是,当我取消检查其中一个子项时,父项的未检查操作将被激活,这将取消检查所有子项 复选框绑定到同名的布尔项 检查代码: private void IsChecked(object sender, RoutedEventArgs e) { C

我的uwp计划中有:

我希望这样:

如果选中了“父项”复选框,则所有子项也将被选中。 如果取消选中“父项”复选框,则所有子项也将被选中。 如果选中所有子项复选框,则父项也将选中。 如果未选中任何子项复选框,则不会选中父项。 我的当前代码可以处理前三个,但是,当我取消检查其中一个子项时,父项的未检查操作将被激活,这将取消检查所有子项

复选框绑定到同名的布尔项

检查代码:

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;
    }
}

是否有一种方法可以更有效地/以一种有效的方式执行此操作。

最好不要订阅已检查和未检查的事件,当您设置IsChecked属性时,它总是会触发这两个事件,这将不便于判断。在这个场景中,您可以为您的复选框订阅Click事件。例如:

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;
    }
}