Xamarin:Collection.Remove in List是否删除了错误的对象?

时间:2018-06-12 23:23:48

标签: android listview xamarin

我在用户设备的列表视图中有一些奇怪的行为,我在Android设备上用Xamarin格式找不到相同的问题。

我有一个列表视图,它与列表集合中的IList对象绑定。列表视图中的每个项目都有一个命令,一旦点击该项目,该命令将从列表中删除。

要删除集合中的项目,我使用了Collection.Remove(model)。 Collection是一个列表,它存储了列表视图中显示的所有ViewModel,模型是从Collection中获取的viewModel。

public ICommand OnAcceptCommand
    {
        get
        {
            return new Command(async (param) =>
            {
                await App.GlobalLayout.PreventMultiClicking(null, async () =>
                {
                    var model = param as HeadCountLineViewModel;
                    var result = await model.ToggleAccounted(true);

                    if (result)
                        Collection.Remove(model);
                });
            });
        }
    }

param是列表视图中项目传递的Collection中的模型。

<DataTemplate x:Key="phoneTemplate">
            <ViewCell>
                <Frame HasShadow="false" Padding="{StaticResource cellPadding}">
                    <local:ExtendedFrame Style="{StaticResource cardStyle}" BackgroundColor="{Binding HeadCountLineStatus, Converter={StaticResource accountedToColorConverter}}">

                        <Grid VerticalOptions="Fill" HorizontalOptions="Fill" RowSpacing="5">
                            <Grid.RowDefinitions> 
                                <RowDefinition Height="*"></RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition> 
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                                <ColumnDefinition Width="2*"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                            </Grid.ColumnDefinitions>

                            <controls:CircleImage
                                Grid.Row="0"
                                Grid.Column="0"
                                Margin="0"
                                Style="{StaticResource profileImageStyle}"
                                Source="{Binding Source}"
                                VerticalOptions="Center"
                                HorizontalOptions="Start"> 
                            </controls:CircleImage>

                            <Label 
                                Grid.Row="0"
                                Grid.Column="1"
                                x:Name="childName" 
                                Text="{Binding ChildName}" 
                                Style="{StaticResource MediumBoldFont}" 
                                HorizontalOptions="StartAndExpand"
                                VerticalOptions="Center">
                            </Label>

                            <Image
                                Grid.Row="0"
                                Grid.Column="1"
                                Style="{StaticResource listviewButtonStyle}"
                                IsVisible="{Binding IsUnAccounted, Converter={StaticResource invertConverter}}"
                                Source="ic_action_undo.png"
                                HorizontalOptions="End">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer  Tapped="OnUndoTapped" />
                                </Image.GestureRecognizers>
                            </Image>
                            <Image 
                                Grid.Row="0"
                                Grid.Column="2"
                                IsVisible="{Binding IsUnAccounted}"
                                Style="{StaticResource listviewButtonStyle}"
                                Source="ic_action_yes.png"
                                VerticalOptions="FillAndExpand"
                                HorizontalOptions="End"> 
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer
                                        Tapped="OnAcceptedTapped">
                                    </TapGestureRecognizer>
                                </Image.GestureRecognizers>
                                <Image.Margin>
                                    <OnIdiom x:TypeArguments="Thickness">
                                        <OnIdiom.Phone>0, 0, 5, 0</OnIdiom.Phone>
                                        <OnIdiom.Tablet>5, 5, 20, 5</OnIdiom.Tablet>
                                    </OnIdiom>
                                </Image.Margin>
                            </Image>
                            <Image
                                Grid.Row="0"
                                Grid.Column="3"
                                IsVisible="{Binding IsUnAccounted}"
                                Style="{StaticResource listviewButtonStyle}"
                                Source="ic_action_no.png"
                                VerticalOptions="FillAndExpand"
                                HorizontalOptions="End">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer
                                        Tapped="OnAbsentTapped">
                                    </TapGestureRecognizer>
                                </Image.GestureRecognizers>
                                <Image.Margin>
                                    <OnIdiom x:TypeArguments="Thickness">
                                        <OnIdiom.Phone>5, 0, 0, 0</OnIdiom.Phone>
                                        <OnIdiom.Tablet>20, 5, 5, 5</OnIdiom.Tablet>
                                    </OnIdiom>
                                </Image.Margin>
                            </Image>

                            <StackLayout Orientation="Horizontal" 
                                Grid.Row="1"
                                Grid.Column="0"
                                Grid.ColumnSpan="4">
                                <local:ChildInfoIconsView 
                                    ShowClassroom="false"
                                    Child="{Binding Child}"
                                    VerticalOptions="Center">
                                </local:ChildInfoIconsView>
                                <ffimageloading:CachedImage 
                                    LoadingDelay="2000"
                                    WidthRequest="24"
                                    HeightRequest="24"
                                    x:Name="ImageClassroom"
                                    Source="ic_location"
                                    IsVisible="{Binding HasClass}">
                                </ffimageloading:CachedImage>
                                <Label
                                    Style="{StaticResource NormalFont}"
                                    Text="{Binding Class}"
                                    VerticalOptions="FillAndExpand"
                                    VerticalTextAlignment="Center"
                                    HorizontalTextAlignment="Start"
                                    IsVisible="{Binding HasClass}">
                                </Label>
                                <Label  
                                    x:Name="note" 
                                    Text="{Binding Note, StringFormat='Absent Note : {0}'}" 
                                    Style="{StaticResource SmallFont}"
                                    HorizontalOptions="StartAndExpand"
                                    IsVisible="{Binding IsNoteVisible}">
                                </Label>
                            </StackLayout> 

                        </Grid>

                    </local:ExtendedFrame>
                </Frame>        
            </ViewCell>
        </DataTemplate>

在页面中:

void OnAcceptedTapped (object sender, System.EventArgs e)
    {
        if (sender is Image && ((Image)sender).BindingContext is HeadCountLineViewModel)
        {
            var model = ((Image)sender).BindingContext as HeadCountLineViewModel;
            var vModel = BindingContext as ShowAllHeadCountLinesViewModel;
            vModel.OnAcceptCommand.Execute(model);
        }
    }

从第一个代码开始,我有一个Collection.Remove。任何机会错误的模型被删除。从用户的视频中可视地看到,移除的单元格看起来像被移除但是移除的单元格中的Child名称保持不变,其他可视元素更新为例如源。

0 个答案:

没有答案