2016-02-19 54 views
0

我想让每个listcell在不同的列表视图中取决于他们之前点击的内容,并且我正在使用INotifyPropertyChanged执行此操作。在我的INotifyPropertyChanged类中运行异步函数并且代码不运行

我在我的班级有一个if/else代码,但它没有运行..我没有颜色。 如果我例如我们的颜色= Color.Green;在我的公共电流内,然后它的工作。但是,当我做这个if/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(); 

    } 

回答

0

机会被拦截d。

您的电话从您的asyncRunThis函数构造函数不使用await,这当然不能在构造函数内。

也可以尝试到RunThis功能沿线更改为: -

public async Task RunThis() 
{ 
    .. 
} 

然后找到并适当的地方调用这个使用await,而不是通过一个构造。请确保调用者也有async

+0

如何通过构造函数调用它?也许这会做到这一点?保护覆盖异步无效OnAppearing() \t \t { //并把代码放在这里? \t \t} –

+0

找不到合适的替代方法.. –

+0

@ William.John'受保护的异步覆盖无效OnAppearing()'在“ContentPage”上可用。 – Pete