Caliburn.Micro 中 ActivateItem 之后的操作
Action after ActivateItem in 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);
}
}
如果 ActivateItem
结束,是否可以 hang
一个应用程序并仅转到 if
语句?
如何在 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()
时它不会显示任何内容 window,应用程序永远挂起
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
关闭时点击它。
您应该等待 ActivateItemAsync
方法。这意味着你的 LoadTaskManagerPage()
应该 return 一个 Task
你也应该 await
这个:
public async Task LoadTaskManagerPageAsynnc()
{
await this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));
if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
{
//logic
}
}
我有一个问题。我有启动按钮 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);
}
}
如果 ActivateItem
结束,是否可以 hang
一个应用程序并仅转到 if
语句?
如何在 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()
时它不会显示任何内容 window,应用程序永远挂起
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
关闭时点击它。
您应该等待 ActivateItemAsync
方法。这意味着你的 LoadTaskManagerPage()
应该 return 一个 Task
你也应该 await
这个:
public async Task LoadTaskManagerPageAsynnc()
{
await this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));
if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
{
//logic
}
}