我是新來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