Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在执行所有更新例程时显示旋转滚轮?_C#_Xamarin_Xamarin.ios_Xamarin.android_Xamarin.forms - Fatal编程技术网

C# 如何在执行所有更新例程时显示旋转滚轮?

C# 如何在执行所有更新例程时显示旋转滚轮?,c#,xamarin,xamarin.ios,xamarin.android,xamarin.forms,C#,Xamarin,Xamarin.ios,Xamarin.android,Xamarin.forms,我目前正在做一些用Xamarin.Forms编写的移动项目。我这里有个问题。我需要更新包含一些数据的listview。因此,我启用了IsPullToRefreshEnabled=true和 listView.Refreshing += (sender, e) => { method1(); method2(); listView.EndRefresh(); }; 然而,我不知道如何使旋转指示器显示,直到所有更新例程完成 public class Class1

我目前正在做一些用Xamarin.Forms编写的移动项目。我这里有个问题。我需要更新包含一些数据的listview。因此,我启用了
IsPullToRefreshEnabled=true

listView.Refreshing += (sender, e) => {
    method1();

    method2();

    listView.EndRefresh();
};
然而,我不知道如何使旋转指示器显示,直到所有更新例程完成

public class Class1 : ContentPage
{
    readonly Class2 mangr = new Class2();
    void BuildUI()
    {
        listView = new ListView
        {
            ItemsSource = new object[] { },
            ItemTemplate = new DataTemplate(listRender.MakeCell),

            RowHeight = 88,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,

            IsPullToRefreshEnabled = true,
            IsRefreshing = false,
        };

        listView.Refreshing += (sender, e) =>
        {
            listView.IsRefreshing = true;

            manager.ForceUpdate();

            listView.IsRefreshing = false;
            listView.EndRefresh();
        };
    }
}

public class Class2
{
    public bool updating = false;

    public void PleaseUpdate()
    {
        if (!running)
        {
            return;
        }

        if (!data.loading)
        {
            updating = true; 
            PleaseUpdate();
            updating = false;
        }
    }
    void PleaseUpdate(Action afterall = null){/some code/}
}

你是说PullToRefresh活动指示器吗?为此,必须将
IsRefreshing
属性设置为
true
。因此,只要在开始时将其设置为
true
,并在准备就绪时将其设置为
false
,如下所示

listView.Refreshing += (sender, e) =>  { 
    listView.IsRefreshing = true;

    method1();

    method2();

    listView.IsRefreshing = false;
    listView.EndRefresh();
};
如果方法是
async
,这将不起作用,因为它将直接转到
IsRefreshing=false

有多种方法可以实现这一点,运行同步,这可能不是您想要的,或者创建一个绑定到
listView.IsRefreshing
属性的公共属性。然后从您真正完成加载的位置设置该属性

更新

在提供代码时,一种方法是:

  • 将您的
    listView.IsRefreshing
    设置为
    pumpsManager.isLoading
  • FuelPumpsDataManager
    上实施,并在
    isLoading
    上实施。注意,您需要将“isLoading”转换为属性。另一种更简单的方法是使用NuGet包

现在,无论何时开始和停止加载,您都可以设置
isLoading
,并且您的ListView应该相应地显示动画。

您是指PullToRefresh ActivityIndicator吗?为此,必须将
IsRefreshing
属性设置为
true
。因此,只要在开始时将其设置为
true
,并在准备就绪时将其设置为
false
,如下所示

listView.Refreshing += (sender, e) =>  { 
    listView.IsRefreshing = true;

    method1();

    method2();

    listView.IsRefreshing = false;
    listView.EndRefresh();
};
如果方法是
async
,这将不起作用,因为它将直接转到
IsRefreshing=false

有多种方法可以实现这一点,运行同步,这可能不是您想要的,或者创建一个绑定到
listView.IsRefreshing
属性的公共属性。然后从您真正完成加载的位置设置该属性

更新

在提供代码时,一种方法是:

  • 将您的
    listView.IsRefreshing
    设置为
    pumpsManager.isLoading
  • FuelPumpsDataManager
    上实施,并在
    isLoading
    上实施。注意,您需要将“isLoading”转换为属性。另一种更简单的方法是使用NuGet包

现在,您可以在启动和停止加载时设置
isLoading
,并且您的ListView应该相应地显示动画。

谢谢您的回答。是的,我试过了。很抱歉,我忘了提到那些方法在后台调用异步方法。那东西能正常工作吗?你用的是绑定还是MVVM?是的,我用的是MVVM是的,我明白了。但现在还不是很清楚。所以我有一种
dataManager
,我要求更新它,我刚刚在类中创建了一个名为
isupdding
的字段,它指示数据当前正在更新。你能告诉我我到底应该如何绑定这些东西吗?你有什么方法可以告诉我你现在拥有的代码吗?谢谢你的回答。是的,我试过了。很抱歉,我忘了提到那些方法在后台调用异步方法。那东西能正常工作吗?你用的是绑定还是MVVM?是的,我用的是MVVM是的,我明白了。但现在还不是很清楚。所以我有一种
dataManager
,我要求更新它,我刚刚在类中创建了一个名为
isupdding
的字段,它指示数据当前正在更新。你能告诉我我到底应该如何绑定这些东西吗?你有什么方法可以告诉我你现在的代码吗?