我是新来Caliburn.Micro (和MVVM为此事),我试图激活屏幕位于ShellViewModel
从按钮子之内我的向导viewmodel(一个叫导体)。我见过的所有教程都有实际外壳中的按钮,可以在两者之间切换,所以我有点迷路。从另一个视图模型
所有的ViewModels共享命名空间SafetyTraining.ViewModels
的ShellViewModel
(第一次使用过一个壳,所以我可能在错误的方式来使用它)
public class ShellViewModel : Conductor<object>.Collection.OneActive, IHaveDisplayName
{
public ShellViewModel()
{
ShowMainView();
}
public void ShowMainView()
{
ActivateItem(new MainViewModel());
}
}
ShellView
XAML
<UserControl x:Class="SafetyTraining.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel>
<ContentControl x:Name="ActiveItem" />
</DockPanel>
MainViewModel
- 主屏幕(正确显示)。
public class MainViewModel : Screen
{
public void ShowLoginPrompt()
{
LoginPromptViewModel lg = new LoginPromptViewModel();//This does happen
}
}
MainView
XAML
<Button cal:Message.Attach="[Event Click] = [ShowLoginPrompt]">Login</Button>
LoginPromptViewModel
public class LoginPromptViewModel : Screen
{
protected override void OnActivate()
{
base.OnActivate();
MessageBox.Show("Hi");//This is for testing - currently doesn't display
}
}
编辑工作代码:
修改嗅探器的代码位妥善适合我的结构。谢谢:)
var parentConductor = (Conductor<object>.Collection.OneActive)(this.Parent);
parentConductor.ActivateItem(new LoginPromptViewModel());
它是定制的差异,或只是版本差异(我使用1.5.2),你通过Conductor no param(不适用于我)和Active而不是ActivateItem来做到这一点?只是想知道 – PRX
@PRX对不起,我不完全明白你在问什么? –
没关系我想我得到为什么XD – PRX