Xamarin Forms 忽略来自 StackLayout 上 DataType 的按钮绑定

问题描述

我有以下 xaml 代码

            <StackLayout Padding="10" x:DataType="model:Light">
                    <StackLayout HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="1">
                        <Label Text="{Binding Name}" LineBreakMode="Nowrap" Style="{DynamicResource ListItemTextStyle}" FontSize="24" HorizontalOptions="StartAndExpand"  VerticalOptions="StartAndExpand"/>
                    </StackLayout>
                    <StackLayout HorizontalOptions="FillAndExpand" Grid.Column="1" Grid.Row="1" >
                        <Button Text="{Binding Enabled}" Command="{Binding ToggleLight}" CommandParameter="{Binding .}" HorizontalOptions="CenterandExpand"></Button>
                    </StackLayout>
            </StackLayout>

如何在我的 Button 表单上排除 Command="{Binding ToggleLight}" 和 StackLayout 上定义的 x:DataType="model:Light"

解决方法

使用binding-path

  1. 在 StackLayout 之外定义“x:Name”(StackLayout、Grid、ListView 等)
  2. 为 StackLayout 内的 Command 绑定添加“x:Reference”
  3. 该命令被排除。

喜欢:

<Grid x:Name="WhateverParent">
    <StackLayout x:DataType="model:Light">
        <Button ... Command="{Binding Path=BindingContext.ToggleLight,Source={x:Reference WhateverParent}}" />
    </StackLayout>
</Grid>