我是 Caliburn.Micro 的新手(以及 MVVM),我正在尝试通过ShellViewModel
子视图模型中的按钮(由指挥者调用的按钮)激活一个屏幕,其中指挥者位于其中。我见过的所有教程都有在实际外壳中切换的按钮,所以我有点迷茫。
所有 ViewModel 共享命名空间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
}
}
编辑工作代码:
稍微修改了 Sniffer 的代码以适合我的结构。谢谢 :)
var parentConductor = (Conductor<object>.Collection.OneActive)(this.Parent);
parentConductor.ActivateItem(new LoginPromptViewModel());