在子视图模型上不调用OnInitialize和OnActivate

Jul*_*anM 12 mvvm caliburn.micro

我希望继承自Screen的子视图模型将参与父屏幕的生命周期.但是,事实并非如此.例如:

public class ParentViewModel : Screen
{
    public ChildViewModel Child { get; set; }

    public ParentViewModel(ChildViewModel childViewModel)
    {
        this.Child = childViewModel;
    }

    public override void OnInitialize() { // called - as expected }

    public override void OnActivate() { // called - as expected }

    public override void OnDeactivate() { // called - as expected }
}

public class ChildViewModel : Screen
{
    public override void OnInitialize() { // not called - why? }

    public override void OnActivate() { // not called - why? }

    public override void OnDeactivate() { // not called - why? }
}
Run Code Online (Sandbox Code Playgroud)

是否可以让子屏幕参与父屏幕的生命周期?

Jul*_*anM 21

看来这种行为不是默认情况下,必须告诉父母使用该ConductWith方法"执行"子视图模型,如下所示:

public class ParentViewModel : Screen
{
    public ChildViewModel Child { get; set; }

    public ParentViewModel(ChildViewModel childViewModel)
    {
        this.Child = childViewModel;

        Child.ConductWith(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

这确保了ChildViewModel将与父级同时初始化,激活和停用.ActivateWith如果您只需要初始化/激活子项,则可以使用该方法.