2015-03-30 67 views
0

我想用MVVM Light將數據綁定到網格。如果我做了以下工作原理:MVVM Light的異步綁定問題

public class GuidePageViewModel : ViewModelBase 
{ 
    private ObservableCollection<SimpleChannelData> _simpleChannelDataList; 
    private IChannelDataService _channelDataService; 

    public GuidePageViewModel(IChannelDataService channelDataService) 
    { 
     _channelDataService = channelDataService; 

     ATest(); // Create data synchronously here 
    } 

    private void ATest() 
    { 
     SimpleChannelDataList = new ObservableCollection<SimpleChannelData>(); 

     var record = new SimpleChannelData() 
     { 
      Cn = 120, 
      Csign = "Hey", 
      Hd = "Y", 
      Index = 1, 
      Premium = "y", 
      TrbId = 9 
     }; 

     SimpleChannelDataList.Add(record); 
    } 

    private async void Start() 
    { 
     await LoadChannelData(); 
    } 

    private async Task LoadChannelData() 
    { 
     SimpleChannelDataList = new ObservableCollection<SimpleChannelData>((await _channelDataService.GetChannelData())); 
     RaisePropertyChanged(() => SimpleChannelDataList); 
    } 

    #region Public Properties 

    public ObservableCollection<SimpleChannelData> SimpleChannelDataList 
    { 
     get 
     { 
      return _simpleChannelDataList; 
     } 
     set 
     { 
      if (Set(() => SimpleChannelDataList, ref _simpleChannelDataList, value)) 
      { 
       RaisePropertyChanged(() => SimpleChannelDataList); 
      } 

     } 
    } 
    #endregion 
} 

現在,如果我改變的構造,而不是下面,使用異步調用Start,電網沒有得到數據:

public GuidePageViewModel(IChannelDataService channelDataService) 
{ 
    _channelDataService = channelDataService; 
    Start(); 
} 

我知道這是某種異步問題,但我無法弄清楚。有人能指出我做錯了什麼嗎?

+0

我無法重現您的問題。從同步方法調用'async void'方法應該可以正常工作(雖然很危險)。你能提供一個我們可以運行的[minimal example](http://stackoverflow.com/help/mcve)嗎? – poke 2015-03-31 06:44:06

回答

0

起初,您不應該在constructor中調用異步方法。嘗試改變你的邏輯,以便不需要該呼叫。

與此同時,請嘗試檢查AsyncMVVM。它包含一些有趣的模式,以異步方式檢索數據,同時公開常見的MVVM界面。

+0

爲什麼要鏈接到這個問題?我期待一些信息,爲什麼不在調用構造函數中調用異步無效方法。這並沒有真正回答這個問題。 – poke 2015-03-31 06:25:29

+0

我給你提供了相關信息。檢查「Constructor」一詞的鏈接:) – Vincenzo 2015-03-31 06:36:14

+0

正如我所說,該鏈接導致* this *問題。 – poke 2015-03-31 06:42:37