如何解决CollectionView 中的对象绑定与 SwipeItem 无法正常工作
在我的 ContentPage XAML 文件中,我有一个像这样的 CollectionView 设置:
<ScrollView Grid.Row="1" Padding="0,0" BackgroundColor="LightGray" IsVisible="{ Binding ShowTrip }" >
<CollectionView x:Name="collectionView"
ItemsSource="{Binding Items}"
SelectionMode="Single">
<CollectionView.ItemTemplate>
<DataTemplate>
<swipeview>
<swipeview.RightItems>
<SwipeItems>
<SwipeItem Text="Directions"
IconImageSource="icon_directions.png"
BackgroundColor="White"
Command="{Binding Source={x:Reference myContentPage},Path=BindingContext.DirectionsCommand}"
CommandParameter="{Binding}"/>
<SwipeItem Text="Deliver"
IconImageSource="icon_deliver.png"
BackgroundColor="White"
Command="{Binding Source={x:Reference myContentPage},Path=BindingContext.DeliverCommand}"
CommandParameter="{Binding}"/>
</SwipeItems>
</swipeview.RightItems>
<Frame BackgroundColor="White" CornerRadius="0" Margin="0,5,0" HasShadow="True">
<Grid x:DataType="model:sRemesa" Padding="0">
<Grid.RowDeFinitions>
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
</Grid.RowDeFinitions>
<Label Text="Remittance" LineBreakMode="Nowrap" FontAttributes="Bold"
Style="{DynamicResource ListItemTextStyle}"
FontSize="13" Grid.Column="0" Grid.Row="1" /> <Label Text="{Binding Number}" LineBreakMode="Nowrap"
Style="{DynamicResource ListItemTextStyle}"
FontSize="13" Grid.Column="1" Grid.Row="1" />
<Label Text="{Binding Customer}"
Grid.Row="2"
LineBreakMode="Nowrap" TextTransform="Uppercase"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" Grid.ColumnSpan="4" />
<Label Text="{Binding Address }"
Grid.Row="3"
LineBreakMode="Nowrap" TextTransform="Uppercase"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" Grid.ColumnSpan="4" />
<Label Text="Boxes" FontAttributes="Bold"
Grid.Row="4" Grid.Column="0"
LineBreakMode="Nowrap"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" />
<Label Text="{Binding BoxesQty}"
Grid.Row="4"
LineBreakMode="Nowrap" TextTransform="Uppercase"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" Grid.Column="1" />
<Label Text="Weight" FontAttributes="Bold"
Grid.Row="4"
LineBreakMode="Nowrap"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" Grid.Column="2" />
<Label Text="{Binding TotalWeight }"
Grid.Row="4"
LineBreakMode="Nowrap" TextTransform="Uppercase"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="13" Grid.Column="3" />
</Grid>
</Frame>
</swipeview>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ScrollView>
Items 是一个 ObservableCollection。问题在 SwipeItems 中根深蒂固,Commands 执行得很好,但 CommandParameter 有时会为 null,有时会得到预期的绑定 TItem 对象。在 CommandParameter 属性上使用 {Binding .} 时的行为是相同的。
调试时,当返回空值时,我从 {Binding .} 转到 {Binding} 或反之亦然,它开始按预期工作。
命令在 viewmodel 上声明如下:
public ICommand DeliverCommand => new Command<TItem>(DeliverRemittance);
public ICommand DirectionsCommand => new Command<TItem>(DirectionsToDestination);
private async void DirectionsToDestination(TItem item)
{
//....
}
private async void DeliverRemittance(TItem item)
{
//....
}
viewmodel 被实例化并分配给 ContentPages 构造函数上的 BindingContext。
解决方法
ContentPage 的 XAML 标记定义如下:
<ContentPage.Content>
<RefreshView>
<Grid>
<StackLayout>
<ContentView>...</ContentView>
<StackLayout>...</StackLayout>
</StackLayout>
<ScrollView>
<CollectionView>...</CollectionView>
</ScrollView>
</Grid>
</RefreshView>
</ContentPage.Content>
从@Cfun 推荐开始:
旁注,您不需要将 collectionView 包装在 ScrollView 中,它自己处理滚动功能。
所以我开始清理 ContentPage 的标记,删除不必要的布局控件,然后,里面的 CollectionView 和 SwipeView 开始工作得很好。标记最终是这样的:
<ContentPage.Content>
<StackLayout>
<ContentView>
.
.
.
</ContentView>
<CollectionView>
.
.
.
</CollectionView>
</StackLayout>
</ContentPage.Content>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。