Xamarin 标签单击更改复选框状态仅 Xaml

sup*_*erd 3 xaml xamarin xamarin.forms

我正在尝试更改 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>
Run Code Online (Sandbox Code Playgroud)

我知道我以前做过这个,但我忘记了。

我必须在 TapGestureRecognizer 中添加一个 setter 或其他东西,以使 Checkbox IsChecked=True 和 IsChecked=False 当它为 True 时

pin*_*dax 5

要以 MVVM 方式执行此操作,您正在寻找的是Command.

在您的 ViewModel 中添加命令:

public ICommand ChangeStateCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

并在构造函数中初始化它:

ChangeStateCommand = new Command(() => IsChecked = !IsChecked);
Run Code Online (Sandbox Code Playgroud)

然后你需要将它与 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>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。-