Ярлык Xamarin Нажмите изменить Флажок State Only Xaml - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь изменить состояние флажка в Xamairn.

Мой код Xaml

<StackLayout Orientation="Horizontal">
    <CheckBox VerticalOptions="Start"
        IsChecked="{Binding IsChecked,Mode=TwoWay}">
        <CheckBox.Margin>
            <OnPlatform x:TypeArguments="Thickness">
                <On Platform="iOS" Value="0,-10,0,0" />
                <On Platform="Android, WinPhone, Windows" Value="0,-5,0,0" />
            </OnPlatform>
        </CheckBox.Margin>
    </CheckBox>
    <Label VerticalTextAlignment="Center" VerticalOptions="Start"
        Text="{Binding Text}">
        <Label.GestureRecognizers>
            <TapGestureRecognizer>

            </TapGestureRecognizer>
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

Я знаю, что делал это раньше, но забыл.

Я должен добавить установщик или что-то в TapGestureRecognizer, чтобы установить флажок IsChecked = True и IsChecked = False, когда его True

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Чтобы сделать это MVVM-способом, вам нужно набрать Command.

. В вашей ViewModel добавить команду:

public ICommand ChangeStateCommand { get; set; }

и инициализировать ее в конструкторе:

ChangeStateCommand = new Command(() => IsChecked = !IsChecked);

Тогда вам нужно будет связать его с TapGestureRecognizer вашего Label.

<StackLayout Orientation="Horizontal" VerticalOptions="CenterAndExpand">
    <CheckBox VerticalOptions="Start"
              IsChecked="{Binding IsChecked,Mode=TwoWay}">
        <CheckBox.Margin>
            <OnPlatform x:TypeArguments="Thickness">
                <On Platform="iOS" Value="0,-10,0,0" />
                <On Platform="Android, WinPhone, Windows" Value="0,-5,0,0" />
            </OnPlatform>
        </CheckBox.Margin>
    </CheckBox>
    <Label VerticalTextAlignment="Center" VerticalOptions="Start"
                                           Text="{Binding Text}" >
        <Label.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding ChangeStateCommand}" />
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

Надеюсь, это поможет .-

0 голосов
/ 20 апреля 2020

Дайте название checkBox и tapEvent для метки, затем измените свойство isChecked в коде:

<StackLayout Orientation="Horizontal">
    <CheckBox VerticalOptions="Start" x:Name="myCheckBox"
    IsChecked="{Binding IsChecked,Mode=TwoWay}">
        <CheckBox.Margin>
            <OnPlatform x:TypeArguments="Thickness">
                <On Platform="iOS" Value="0,-10,0,0" />
                <On Platform="Android, WinPhone, Windows" Value="0,-5,0,0" />
            </OnPlatform>
        </CheckBox.Margin>
    </CheckBox>
    <Label VerticalTextAlignment="Center" VerticalOptions="Start"
    Text="{Binding Text}">
        <Label.GestureRecognizers>
            <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped">
            </TapGestureRecognizer>
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

И в коде:

private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
    myCheckBox.IsChecked = !myCheckBox.IsChecked;

    //or change the IsChecked property in ViewModel
    //myViewModel.IsChecked = !myViewModel.IsChecked;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...