在我的INotifyPropertyChanged类中运行异步函数,代码不运行

时间:2016-02-19 17:06:07

标签: c# forms xamarin

我试图让listview中的每个listcell根据他们之前点击的内容而有所不同,我使用的是INotifyPropertyChanged。

我的课程中有一个if / else代码,但它没有运行..我没有颜色。 如果我例如我们一个颜色= Color.Green;在我的公共电流里然后它工作。但是当我这样做时,如果/ else语句没有运行,那就不行了。

这是我的班级:

public class Current : INotifyPropertyChanged
{
Color color;

    public event PropertyChangedEventHandler PropertyChanged;

    public Current()
    {
         RunThis ();
    }


    async void RunThis ()
    {
        var checkWhatOption = await parseAPI.WhatOption ();

        if ((checkWhatOption ["results"] as JArray).Count > 0) {

             color =  Color.Black;
        }
        else {
            color = Color.Red;
        }

    }

    public Color Color
    {
        set
        {
            if (color != value)
            {
                color = value;

                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs("Color"));
                }
            }
        }
        get
        {
            return color;
        }

    }
  }

在我使用它的页面上的XAML中,我有这段代码:

<Label BackgroundColor="{Binding Color}"  >  
<Label.BindingContext>
  <local:Current />
</Label.BindingContext>

更新:

    public static async Task RunThis()
    {

        if ((Stringone ["results"] as JArray).Count > 0) {

            Color = Color.Black; //An object reference is required to access non-static member.
        }
        else {
            color = Color.Red; //An object reference is required to access non-static member.

        }

    }


protected override async void OnAppearing()
    {
        await Current.RunThis ();

    }

1 个答案:

答案 0 :(得分:0)

它有可能被封锁。

您对构造函数中async RunThis函数的调用未使用await,当然您无法在构造函数中使用。

还尝试将RunThis函数更改为以下内容: -

public async Task RunThis()
{
   ..
}

然后找到并使用await调用此地点,但不是通过构造函数调用。确保来电者也指定了async