Mvvm CollectionView remainingItemsThreshHoldReach命令出错
我在我的应用程序中使用Prism MVVM。这是我的XAML代码Mvvm CollectionView remainingItemsThreshHoldReach命令出错,mvvm,xamarin.forms,xamarin.android,prism,collectionview,Mvvm,Xamarin.forms,Xamarin.android,Prism,Collectionview,我在我的应用程序中使用Prism MVVM。这是我的XAML代码 IsRefreshing="{Binding IsRefreshing}" Command="{Binding RefreshCommand}"> <CollectionView ItemsSource="{Binding Images}" RemainingItemsThreshold="1"
IsRefreshing="{Binding IsRefreshing}"
Command="{Binding RefreshCommand}">
<CollectionView ItemsSource="{Binding Images}"
RemainingItemsThreshold="1"
RemainingItemsThresholdReachedCommand="{Binding UpdateImagesCommand}">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical"
Span="3"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="2">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ff:CachedImage
Grid.Row="0"
Grid.Column="0"
HorizontalOptions="Center"
VerticalOptions="Center"
Aspect="AspectFill"
Source="{Binding Source, Mode=OneWay}">
<ff:CachedImage.Transformations>
<ffTransformations:CropTransformation />
</ff:CachedImage.Transformations>
</ff:CachedImage>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</RefreshView>
IsRefreshing=“{Binding IsRefreshing}”
Command=“{Binding RefreshCommand}”>
正如您在这里看到的,我使用值“1”将参数RemainingItemsThreshold绑定到remainingItemsThresholdReacheCommand上
下面是这个xaml页面的视图中代码模型的一部分
private ObservableCollection _images;
public ObservableCollection Images
{
get { return _images; }
set { SetProperty(ref _images, value); }
}
private DelegateCommand _refreshCommand;
public DelegateCommand RefreshCommand =>
_refreshCommand ?? (_refreshCommand = new DelegateCommand(ExecuteRefreshCommand));
private DelegateCommand _updateImagesCommand;
public DelegateCommand UpdateImagesCommand =>
_updateImagesCommand ?? (_updateImagesCommand = new DelegateCommand(ExecuteUpdateImagesCommand));
void ExecuteUpdateImagesCommand()
{
//Image im = new Image();
//im.Source = "Huayra3.jpg";
//Image im7 = new Image();
//im7.Source = "Huayra1.jpg";
//Images.Add(im7);
//Images.Add(im7);
//Images.Add(im);
//Images.Add(im);
//Images.Add(im);
//Images.Add(im);
}
void ExecuteRefreshCommand()
{
// refresh posts feed command
IsRefreshing = false;
}
public AccountPageViewModel(INavigationService navigationService, IUserDataService userDataService) :
base(navigationService)
{
_userDataService = userDataService;
CurrentUser = userDataService.CurrentUser;
if (String.IsNullOrEmpty(this.CurrentUser.ImagePath))
{
this.CurrentUser.ImagePath = "user_avatar.jpg";
}
Images = new ObservableCollection<Image>();
Image im = new Image();
im.Source = "Huayra3.jpg";
Images.Add(im);
Image im1 = new Image();
im1.Source = "Huayra1.jpg";
Images.Add(im1);
Image im2 = new Image();
im2.Source = "Huayra4.jpg";
Images.Add(im2);
Image im3 = new Image();
im3.Source = "Huayra3.jpg";
Images.Add(im3);
Image im4 = new Image();
im4.Source = "Huayra1.jpg";
Images.Add(im4);
Image im5 = new Image();
im5.Source = "Huayra4.jpg";
Images.Add(im5);
Image im6 = new Image();
im6.Source = "Huayra3.jpg";
Images.Add(im6);
Image im7 = new Image();
im7.Source = "Huayra1.jpg";
Images.Add(im7);
Images.Add(im7);
Images.Add(im7);
Images.Add(im7);
Images.Add(im7);
Images.Add(im7);
Images.Add(im7);
Images.Add(im);
//Images.Add(im);
//Images.Add(im);
}
private observedcollection\u图像;
公众可观测采集图像
{
获取{return\u images;}
set{SetProperty(ref_图像,值);}
}
私有DelegateCommand _refresh命令;
公共DelegateCommand刷新命令=>
_刷新命令??(_refreshCommand=newdelegatecommand(ExecuteRefreshCommand));
私有DelegateCommand _updateImagesCommand;
public DelegateCommand UpdateImagesCommand=>
_UpdateImage命令??(_updateImagesCommand=new DelegateCommand(ExecuteUpdateImagesCommand));
void ExecuteUpdateImagesCommand()
{
//图像im=新图像();
//im.Source=“Huayra3.jpg”;
//图像im7=新图像();
//im7.Source=“Huayra1.jpg”;
//添加图像(im7);
//添加图像(im7);
//图像。添加(im);
//图像。添加(im);
//图像。添加(im);
//图像。添加(im);
}
void ExecuteRefreshCommand()
{
//刷新posts提要命令
IsRefreshing=假;
}
公共帐户页面视图模型(iAvigationService navigationService、IUserDataService userDataService):
基地(导航服务)
{
_userDataService=userDataService;
CurrentUser=userDataService.CurrentUser;
if(String.IsNullOrEmpty(this.CurrentUser.ImagePath))
{
this.CurrentUser.ImagePath=“user\u avatar.jpg”;
}
图像=新的ObservableCollection();
图像im=新图像();
im.Source=“Huayra3.jpg”;
图像。添加(im);
图像im1=新图像();
im1.Source=“Huayra1.jpg”;
图像。添加(im1);
图像im2=新图像();
im2.Source=“Huayra4.jpg”;
图像。添加(im2);
图像im3=新图像();
im3.Source=“Huayra3.jpg”;
图像。添加(im3);
图像im4=新图像();
im4.Source=“Huayra1.jpg”;
图像。添加(im4);
图像im5=新图像();
im5.Source=“Huayra4.jpg”;
图像。添加(im5);
图像im6=新图像();
im6.Source=“Huayra3.jpg”;
添加图像(im6);
图像im7=新图像();
im7.Source=“Huayra1.jpg”;
添加图像(im7);
添加图像(im7);
添加图像(im7);
添加图像(im7);
添加图像(im7);
添加图像(im7);
添加图像(im7);
图像。添加(im);
//图像。添加(im);
//图像。添加(im);
}
正如您所看到的,我在VIewModel构造函数中编写了一些值,并将其添加到列表中。我阅读了有关CollectionView的microsoft文档,我知道UpdateImagesCommand仅在达到RemainingItemsThreshold时才会执行。但ExecuteUpdateImagesCommand()在我导航到此页面时调用,在我的选项卡式页面中的页面之间随机导航时调用。这不应该,但我不知道发生这种情况的原因。smbd能帮我吗?我找到了解决这个问题的另一种方法。我可以使用IsActive PRISM属性来理解这个页面是我需要的。根据Microsoft的说法,我们可以看到RemainingItemsThreshold属性的默认值是-1,对于大于0的值,当ItemsSource包含尚未滚动到的项目数时,将触发RemainingItemsThresholdReach事件。那么,当您使用ExecuteUpdateImagesCommand导航时,是否添加了更新图像源?我找到了另一种解决此问题的方法。我可以使用IsActive PRISM属性来理解我需要的是这个页面。很高兴听到你自己解决了你的问题,请记住发布一条关于你的解决方案的回复,并将你的回复标记为答案,这对其他面临相同问题的社区成员是有益的,谢谢。你能用一个代码示例来解释你的实现吗?