Caliburn.Micro中ActivateItem之后的操作

时间:2019-05-26 10:25:30

标签: c# wpf caliburn.micro

我有一个问题。我有启动ActivateItem的按钮:

    public void LoadTaskManagerPage()
    {
        this.ActivateItem(new TaskManagerViewModel(this.LoggedUser, this.repository));

        if (this.LoggedUser.GetUserTask() != null)
        {
            this.IsActiveTaskButtonVisible = Visibility.Visible;
            this.NotifyOfPropertyChange(() => this.IsActiveTaskButtonVisible);
        }
    }

如果hang结尾,是否可以if开发一个应用程序并仅进入ActivateItem语句?

如何在Caliburn.Micro中等待ActivateItem的结束?

编辑:

尝试类似的事情:

    public void LoadTaskManagerPage()
    {
        var taskManagerTask = Task.Run(() => this.ActivateItem(new TaskManagerViewModel(this.LoggedUser, this.repository)));
        taskManagerTask.Wait();

        if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
        {
            this.IsActiveTaskButtonVisible = Visibility.Visible;
            this.NotifyOfPropertyChange(() => this.IsActiveTaskButtonVisible);
        }
    }

使用“任务”,但是当我单击LoadTaskManagerPage()时,它不会显示任何窗口,应用程序将永远挂起

EDIT2

基于我在github上的issue,我将Caliburn升级到alpha 4.0

public void LoadTaskManagerPage()
    {
        this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));

        if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
        {
            //logic
        }
    }

我将ActiveItem()更改为ActiveItemAsync(),但仍然击中了if语句,活动项目将关闭。使用async/await做同样的事情

EDIT3

当我使async/await仍然工作时,请查看右侧的视图。其单击的User Control不会出现。在同一时间(即使我的User Control没有出现),我也过早打了if语句。我想在User Control关闭时点击它。

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该等待ActivateItemAsync方法。这意味着您的LoadTaskManagerPage()应该返回一个Task,而您也应该await返回一个:

public async Task LoadTaskManagerPageAsynnc()
{
    await this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));

    if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
    {
        //logic
    }
}