Xamarin: удаляет ли Collection.Remove в List неправильный объект? - PullRequest
0 голосов
/ 13 июня 2018

У меня странное поведение в представлении списка на устройствах пользователя, которое я не могу найти той же проблемы на наших устройствах в Android, написанном в форме Xamarin.

У меня есть представление списка, которое связано с IListобъекты в списке коллекции.У каждого элемента в списке есть команда, которая после щелчка на элементе будет удалена из списка.

Чтобы удалить элемент из коллекции, я использовал Collection.Remove (модель).Коллекция - это список, в котором хранятся все ViewModel, показанные в представлении списка, а модель - это модель представления, полученная из Collection.

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);
                });
            });
        }
    }

Параметром является модель из Коллекции, передаваемая элементом в представлении списка.

<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.Случайно не та модель была удалена.Визуально из видео пользователя удаленная ячейка выглядит так, как будто она удалена, но имя ребенка в удаленной ячейке остается неизменным, когда обновляется другой визуальный элемент, например, Источник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...