我对 Xamarin BindingContext 感到困惑
I have a Xamarin BindingContext quandary
我创建了一个自定义 CheckBox 控件,并向其添加了 Command/CommandParameter 功能。我尝试使用 Behavior 和 运行 解决同样的问题。这是我的 XAML:
`
<ContentPage.Content>
<CollectionView ItemsSource="{Binding MyShoppingList}"
SelectionMode="None"
EmptyView="No items in your Shopping List">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="0" ColumnDefinitions="30, *, 200">
<controls:CheckBoxEx x:Name="CompletedCheckBox"
IsChecked="{Binding Completed, Mode=TwoWay}"
Command="{Binding ToggledCommand}"
CommandParameter="{Binding .}"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Label Text="{Binding ItemName}" Grid.Column="1" HorizontalOptions="StartAndExpand" VerticalOptions="Center"/>
<Label Text="{Binding StoreName}" Grid.Column="2" HorizontalOptions="EndAndExpand" VerticalOptions="Center"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentPage.Content>
`
我的 CollectionView 的 BindingContext 显然是我的 ViewModel; MyShoppingList 是在 ViewModel 中创建的 ObservableCollection。 CheckBox IsChecked 值作为已完成 属性 位于我的模型中。但是,找不到命令,因为 CollectionView 显然将 BindingContext 从 ViewModel 更改为 Model,因此已正确绑定 Completed、ItemName 和 StoreName 属性。如何将 Command 与 ViewModel 相关联,以便 Binding 正确发生?该命令的目的是触发数据库更新。这是我看到的运行时错误:
[0:] 绑定:'ToggledCommand' 属性 未在 'ShoppingList.Models.ShoppingListItem' 上找到,目标 属性:'GLLCustomControls.CheckBoxEx.Command'
像这样的东西应该可以工作
Command="{Binding Source={RelativeSource AncestorType={x:Type vm:ShoppingListViewModel}}, Path=ToggledCommand}"
Xamarin 文档有 multiple examples 个更复杂的绑定场景
我创建了一个自定义 CheckBox 控件,并向其添加了 Command/CommandParameter 功能。我尝试使用 Behavior 和 运行 解决同样的问题。这是我的 XAML:
`
<ContentPage.Content>
<CollectionView ItemsSource="{Binding MyShoppingList}"
SelectionMode="None"
EmptyView="No items in your Shopping List">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="0" ColumnDefinitions="30, *, 200">
<controls:CheckBoxEx x:Name="CompletedCheckBox"
IsChecked="{Binding Completed, Mode=TwoWay}"
Command="{Binding ToggledCommand}"
CommandParameter="{Binding .}"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Label Text="{Binding ItemName}" Grid.Column="1" HorizontalOptions="StartAndExpand" VerticalOptions="Center"/>
<Label Text="{Binding StoreName}" Grid.Column="2" HorizontalOptions="EndAndExpand" VerticalOptions="Center"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentPage.Content>
`
我的 CollectionView 的 BindingContext 显然是我的 ViewModel; MyShoppingList 是在 ViewModel 中创建的 ObservableCollection。 CheckBox IsChecked 值作为已完成 属性 位于我的模型中。但是,找不到命令,因为 CollectionView 显然将 BindingContext 从 ViewModel 更改为 Model,因此已正确绑定 Completed、ItemName 和 StoreName 属性。如何将 Command 与 ViewModel 相关联,以便 Binding 正确发生?该命令的目的是触发数据库更新。这是我看到的运行时错误:
[0:] 绑定:'ToggledCommand' 属性 未在 'ShoppingList.Models.ShoppingListItem' 上找到,目标 属性:'GLLCustomControls.CheckBoxEx.Command'
像这样的东西应该可以工作
Command="{Binding Source={RelativeSource AncestorType={x:Type vm:ShoppingListViewModel}}, Path=ToggledCommand}"
Xamarin 文档有 multiple examples 个更复杂的绑定场景