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