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();
}

我知道这是某种异步问题,但我无法解决。有人能指出我做错了什么吗?

首先,您不应该在构造函数中调用异步方法。试着改变你的逻辑,这样就不需要那个调用了。

同时,尝试检查AsyncMVVM。它包含一些有趣的模式,以异步方式检索数据,同时公开常见的MVVM接口。

最新更新