【发布时间】:2013-10-22 03:11:20
【问题描述】:
我是 Caliburn.Micro 的新手(以及 MVVM),我正在尝试通过子视图模型中的按钮激活位于 ShellViewModel 的导体的屏幕(由售票员呼叫)。我见过的所有教程都有在实际外壳中切换的按钮,所以我有点迷茫。
所有 ViewModel 共享命名空间 SafetyTraining.ViewModels
ShellViewModel(第一次使用 shell,所以我可能会以错误的方式使用它)
public class ShellViewModel : Conductor<object>.Collection.OneActive, IHaveDisplayName
{
public ShellViewModel()
{
ShowMainView();
}
public void ShowMainView()
{
ActivateItem(new MainViewModel());
}
}
ShellViewXAML
<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
}
}
MainViewXAML
<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());
【问题讨论】:
标签: c# wpf caliburn.micro