2015-08-06 5 views
3

У меня есть следующий контент страницы, в которой я хочу, чтобы загрузить Steema TeeChart, но я не могу, потому что я не могу сделать MainPage асинхр:Xamarin Формы - асинхронная ContentPage

Мои MainPage:

public class MainPage : ContentPage 
{ 
    public MainPage (bool chart) 
    {   
     ChartView chartView = new ChartView 
     { 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      HeightRequest = 300, 
      WidthRequest = 400 
     }; 

     LineModel test1 = new LineModel(); 
     chartView.Model = await test1.GetModel(); 

     //put the chartView in a grid and other stuff 

     Content = new StackLayout { 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      Children = { 
        grid 
      } 
     }; 
    } 
} 

Мои LineModel Класс:

public class LineModel 
{ 
     public async Task<Steema.TeeChart.Chart> GetModel() 
     { //some stuff happens here } 
} 

Как я могу сделать MainPage асинхр так chartView.Model = await test1.GetModel(); может работать? Я пробовал с «async MainPage», но я получаю ошибки.

ответ

7

Нет, вы не можете. Constructor can't be async in C#; типичным обходным решением является использование асинхронного заводского метода.

public class MainPage : ContentPage 
{ 
    public MainPage (bool chart) 
    {   
     ChartView chartView = new ChartView 
     { 
      VerticalOptions = LayoutOptions.FillAndExpand, 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      HeightRequest = 300, 
      WidthRequest = 400 
     };  
    } 

    public static async Task<MainPage> CreateMainPageAsync(bool chart) 
    { 
     MainPage page = new MainPage(); 

     LineModel test1 = new LineModel(); 
     chartView.Model = await test1.GetModelAsync(); 
     page.Content = whatever; 

     return page; 
    } 
} 

Затем использовать его в качестве

MainPage page = await MainPage.CreateMainPageAsync(true); 

Обратите внимание, что я добавил суффикс «Async» к методу GetModel, который является общим соглашением, используемым для асинхронных методов.

Смежные вопросы