2016-02-19 97 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