CheckBox значения / нет MVVM Xamarin - PullRequest
0 голосов
/ 04 марта 2020

У меня есть группа флажков, и мне нужно, чтобы они изменили значение. Если один отмечен, другой должен быть отключен. Причина, по которой вы не хотите реализовывать MVVM, заключается в том, что это просто новый интерфейс для уже существующего приложения, мне просто нужно, чтобы они работали, прежде чем объединять проекты. Это то, что у меня есть, и оно не работает, я получаю нулевую ссылку / System.NullReferenceException: 'Ссылка на объект не установлена ​​на экземпляр объекта.'

У меня есть это в моем коде

private void AdvancedCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
        {
            if (AdvancedCheckBox.IsChecked == true) //System.NullReferenceException: 'Object reference not set to an instance of an object.'
            {
                AllCheckBox.IsChecked = false;
                UpperIntermediateCheckBox.IsChecked = false;
                AdvancedCheckBox.IsChecked = false;

            }
            else
                AdvancedCheckBox.IsChecked = true;
        }

        private void UpperIntermediateCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
        {
            if (UpperIntermediateCheckBox.IsChecked == true)
            {
                AllCheckBox.IsChecked = false;
                UpperIntermediateCheckBox.IsChecked = false;
                AdvancedCheckBox.IsChecked = false;

            }
            else
                UpperIntermediateCheckBox.IsChecked = true;
        }

        private void IntermediateCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
        {
            CheckBox IntermediateCheckBox = sender as CheckBox;
            if (IntermediateCheckBox.IsChecked == false)
            {
                AllCheckBox.IsChecked = false;
                UpperIntermediateCheckBox.IsChecked = false;
                AdvancedCheckBox.IsChecked = false ;

            }
            else
                IntermediateCheckBox.IsChecked = true ;
        }

        private void AllCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
        {
            CheckBox AllCheckBox = sender as CheckBox;
            if (AllCheckBox.IsChecked == true) System.NullReferenceException: 'Object reference not set to an instance of an object.'
            {

                UpperIntermediateCheckBox.IsChecked = false;
                AdvancedCheckBox.IsChecked = false;
                IntermediateCheckBox.IsChecked = false;
            }
            else
                AllCheckBox.IsChecked = true;
        }

и мой xaml

<StackLayout Grid.Row="0"
                            Orientation="Horizontal"
                            Spacing="10"
                            HorizontalOptions="Start">
                    <grial:Checkbox x:Name="AllCheckBox"
                            IsCheckedChanged ="AllCheckBox_IsCheckedChanged"
                            HorizontalOptions="Start">
                        <Label
                            Margin="10,0"
                            FontSize="19"
                            Text="{ grial:Translate A_LabelAllArticles}"
                            VerticalOptions="Center"
                            TextColor="{ DynamicResource AccentColor }" />
                    </grial:Checkbox>

                </StackLayout>
                <StackLayout  Grid.Row="1"
                            Orientation="Horizontal"
                            Spacing="10"
                            HorizontalOptions="Start">
                    <grial:Checkbox x:Name="BeginnerCheckBox"
                        IsChecked="false"
                        HorizontalOptions="Start">
                        <Label
                            FontSize="19"
                             Margin="10,0"
                            Text="{ grial:Translate A_LabelBeginnerArticles}"
                            VerticalOptions="Center"
                            TextColor="{ DynamicResource AccentColor }" />
                    </grial:Checkbox>

                </StackLayout>
                <StackLayout  Grid.Row="2"
                            Orientation="Horizontal"
                            Spacing="10"
                            HorizontalOptions="Start">
                    <grial:Checkbox x:Name="IntermediateCheckBox"
                            IsCheckedChanged="IntermediateCheckBox_IsCheckedChanged"
                            HorizontalOptions="Start">
                        <Label
                            FontSize="19"
                            Margin="10,0"
                            Text="{ grial:Translate A_LabelIntermediateArticles}"
                            VerticalOptions="Center"
                            TextColor="{ DynamicResource AccentColor }" />
                    </grial:Checkbox>

                </StackLayout>
                <StackLayout  Grid.Row="3"
                            Orientation="Horizontal"
                            Spacing="10"
                            HorizontalOptions="Start">
                    <grial:Checkbox x:Name="UpperIntermediateCheckBox"
                            IsCheckedChanged="UpperIntermediateCheckBox_IsCheckedChanged"
                            HorizontalOptions="Start">
                        <Label
                            FontSize="19"
                            Margin="10,0"
                            Text="{ grial:Translate A_LabelUpperIntermediateArticles}"
                            VerticalOptions="Center"
                            TextColor="{ DynamicResource AccentColor }" />
                    </grial:Checkbox>

                </StackLayout>
                <StackLayout  Grid.Row="4"
                            Orientation="Horizontal"
                            Spacing="10"
                            HorizontalOptions="Start">
                    <grial:Checkbox x:Name="AdvancedCheckBox"
                        IsCheckedChanged="AdvancedCheckBox_IsCheckedChanged"
                            HorizontalOptions="Start">
                        <Label
                            FontSize="19"
                            Margin="10,0"
                            Text="{ grial:Translate A_LabelAdvancedArticles}"
                            VerticalOptions="Center"
                            TextColor="{ DynamicResource AccentColor }" />
                    </grial:Checkbox>

1 Ответ

1 голос
/ 04 марта 2020

Вы используете флажок из Grial UIKit, но определяете отправителя как собственный Xamarin.Forms CheckBox, используйте Grial CheckBox в качестве класса приведения отправителя

//This will make every checkbox to checked or unchecked depending of the state of the clicked one
private void AllCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
{
    CheckBox ClickedCheckbox = sender as UXDivers.Grial.Checkbox;
    ChangeAllCheckboxesTo(ClickedCheckbox.IsChecked != null ? ClickedCheckbox.IsChecked : false);
}

//This will make every checkbox to false if you select one
private void AnyCheckBox_IsCheckedChanged(object sender, IsCheckedChangedEventArgs e)
{
    CheckBox ClickedCheckbox = sender as UXDivers.Grial.Checkbox;
    bool WasSelected = ClickedCheckbox.IsChecked != null ? ClickedCheckbox.IsChecked != null : false;
    ChangeAllCheckboxesTo(false);
    if(!WasSelected)
        ClickedCheckbox.IsChecked = true;
}

public void ChangeAllCheckboxesTo(bool value)
{
    try
    {
        UpperIntermediateCheckBox.IsChecked = value;
        AdvancedCheckBox.IsChecked = value;
        IntermediateCheckBox.IsChecked = value;
    }
    catch(Exception ex)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...