我正在尝试使用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();
}

我知道这种异步问题,但我无法弄清楚。 有人可以指出我做错了吗?

#1楼 票数:0

首先,您不应在构造函数中调用异步方法。 尝试更改您的逻辑,以便不需要该调用。

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

  ask by MrTouya translate from so

未解决问题?本站智能推荐:

1回复

Xamarin从INavigationService形成MVVM清除导航堆栈

我正在处理的项目包含以下结构: 启动应用程序后,用户会看到欢迎页面。 此时用户有两种选择。 他们可以登录或注册。 如果登录== true; 然后转到主详细页面。 或者在注册时,如果注册==成功,则转到登录页面并按照相同的过程进入主详细信息页面。 我正在使用MVVM Light通
3回复

通过使用类在MVVM灯光中引用视图模型定位器

我正在尝试在下面的代码中查找视图模型定位器的引用,但我收到一条错误消息,说无法将对象引用设置为对象的实例:- 有人可以帮我解决这个问题吗?
5回复

如何在ViewModel中的异步任务后更新UI

在我的Xamarin.Forms pcl项目中,我有一个带有label的xaml页面。 我想在执行一些async task后更新label 。 在我的ViewModel constructor为label设置默认文本。 并创建一个名为SomeTask()的async Task函数。 问
2回复

如何覆盖ViewModelDataContext,以便绑定到View中的对象(Mvvm-Light)?

我正在使用Mvvm-Light并且一直忽略了XAML中的绑定到目前为止是如何工作的。 这是我的XAML {Binding SecuritySystemName}和{Binding PageName}正确绑定到我的ViewModel(SecuirtyPanelViewModel)。 但我
1回复

Mvvm-Light用户控制RelayCommand模板绑定

[UWP-Windows 10] 我是MVVM-Light的新手,所以遇到了一些入门问题。 我创建了一个名为TileToolbar的自定义用户TileToolbar ,其中包含以下xaml: 现在,我想为每个RadioButton添加一个RelayCommand ,并且希望每个包含自
1回复

MVVM新鲜与MVVM轻质xamarin形式

我很难理解mvvm fresh和mvvm light之间的区别,或者可以说我只是进入其中。 因此,任何人都可以通过xamarin.forms应用程序轻松使用它。
1回复

数据绑定到列表视图内的命令在UWP/MVVM-Light中不起作用

我想为ListView每个元素都有一个 Delete 按钮,我搜索了 stackoverflow 但没有人回答我的问题。 我尝试给我的ListView ax:Name="QuizListView"并在ListView使用ElementName将命令绑定到按钮。 测验概览.xaml<Page
1回复

MVVM-Light不同的绑定源触发上下文中的所有ViewModel

我在针对mvvm-light的测试模型中遇到一种奇怪的行为:我创建了一个Window并设置了两个资源,一个包含两个不同dataContext的网格,问题是即使我正在使用,两个视图模型也正在接收响应仅一个dataContext的一侧。 有没有一种方法可以只将指定的数据上下文设置为触发我指示的视图