【发布时间】:2018-01-23 11:24:49
【问题描述】:
我在互联网上搜索了最有可能是一个简单的解决方案,但似乎没有人和我遇到同样的问题。
所以简单解释一下,我使用的是 Xamarin Forms,并且我有一个 ListView:
<ListView x:Name="kpiList"
Style="{StaticResource customList}"
HasUnevenRows="true"
SeparatorVisibility="None"
IsPullToRefreshEnabled="true"
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="3">
</ListView>
我这样定义了它的 RefreshCommand 和 IsRefreshing 属性:
public partial class MainPage : ContentPage
{
bool _isRefreshing = false;
public bool IsRefreshing
{
get { return _isRefreshing; }
set
{
_isRefreshing = value;
OnPropertyChanged(nameof(IsRefreshing));
}
}
public ICommand RefreshData;
public MainPage()
{
RefreshData = new Command(RepopulateList);
kpiList.RefreshCommand = RefreshData;
kpiList.IsRefreshing = IsRefreshing;
{
void RepopulateList()
{
IsRefreshing = true;
Controller.KPIs.Clear();
foreach (KPIObj kpi in await
WebServices.GetUpdatedKPI(Controller.SavedKPIIds))
{
Controller.KPIs.Add(kpi);
}
IsRefreshing = false;
}
}
奇怪的是,我第一次拉刷新它工作得很好。但是我第二次尝试时,它永远不会进入Command设置的代码块。
就好像 ListView 在第一次拉刷新后“丢失”了指向命令的指针。
【问题讨论】:
-
(抱歉,porr 英语)根据您的代码,每次调用刷新命令都会返回一个不同的 Command 实例。我想这是错误的。您应该只返回它的一个实例...我建议您更改命令定义以将其设置为单独的方法并在构造函数中设置
-
为了确保这一点,将您的方法主体包围在一个 try 块中并警告异常。我猜它无处抛出异常
-
感谢 Diego 的建议,我已经尝试了您的想法,但它似乎仍然在做同样的事情。没有错误被抛出。
-
您将这些属性设置器添加到哪个构造函数?您是否使用某种 MVVM 框架?
-
我并没有完全使用 MVVM 框架,尽管我可以理解应该是。我尝试使用 Binding 将属性分配给 XAML 中的 ListView,但结果相同。
标签: c# listview xamarin.forms pull-to-refresh