有人可以告诉我我的代码有什么问题吗?我试图让我的xaml页面上的刷新工作,它不适用于Android或iPhone。我想可能就是我的listview布局了。任何人都可以告诉我ListView中是否有可能阻止刷新命令触发的内容?这是我的ListView的xaml代码
<ContentPage.Content>
<ListView x:Name="TDRView" HasUnevenRows="True" ItemTapped="OnItemTapped" IsPullToRefreshEnabled="True" RefreshCommand="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid x:Name ="gridTDR">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*" />
<ColumnDefinition Width="25*" />
<ColumnDefinition Width="25*" />
</Grid.ColumnDefinitions>
<StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" Grid.Column="0" Grid.Row="0">
<Label x:Name="lblTDRID" Text="{Binding TDRID}" IsVisible="false" />
<Label x:Name="lblCustName" Text="{Binding CustomerName}" FontSize="Medium" TextColor="Black" />
</StackLayout>
<Button Image="iconApprove.png" Clicked="OnApproveButtonClicked" Grid.Column="1" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" />
<Button Image="iconReject.png" Clicked="OnRejectButtonClicked" Grid.Column="2" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" />
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
以下是代码背后的方法......
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
namespace AppNameSpace
{
public partial class MainPage : ContentPage
{
ObservableCollection<TDR> collection = new ObservableCollection<TDR>();
private bool _isRefreshing = false;
public bool IsRefreshing
{
get { return _isRefreshing; }
set
{
_isRefreshing = value;
OnPropertyChanged(nameof(IsRefreshing));
}
}
public ICommand RefreshCommand
{
get
{
return new Command(async () =>
{
IsRefreshing = true;
await Service.GetPendingTDRs();
IsRefreshing = false;
});
}
}
public MainPage()
{
InitializeComponent();
TDRView.ItemsSource = collection;
GetTDRs();
}
}
}
谢谢!
答案 0 :(得分:0)
注意您正在测试的操作系统/使用pull来刷新。
Windows Phone 8.1不支持pull-to-refresh。 在Windows Phone 8上,pull-to-refresh不是本机平台功能,因此Xamarin.Forms提供了pull-to-refresh的实现。
最后,请注意,如果列表中的所有元素都可以放在屏幕上(换句话说,如果不需要垂直滚动),则即使刷新也无法在Windows Phone上运行。
答案 1 :(得分:0)
您没有为XAML设置BindingContext。您需要这样,以便XAML知道您在ListView中使用Bindings何时用于RefreshCommand和Refreshing。
要执行此操作,只需在MainPage构造函数BindingContext = this;
类似的东西:
public MainPage()
{
InitializeComponent();
BindingContext = this;
TDRView.ItemsSource = collection;
GetTDRs();
}
this
表示后面的代码将作为XAML的绑定上下文。
这是一个拉动刷新的例子。
https://xamarinhelp.com/pull-to-refresh-listview/
希望这会有所帮助.-