簡體   English   中英

WPF Caliburn.Micro:生命周期問題

[英]WPF Caliburn.Micro : Life Cicyle problems

我有一個名為AppViewModel的類,該類負責控制屏幕。 AppViewModel擴展了我的BaseConductor:

public class BaseConductor : Conductor<Screen>.Collection.OneActive
{
   ...
}

然后,在AppViewModel的構造函數上調用一個viewmodel(UserControl):

        this.ActivateItem(new FirstViewModel());

FirstViewModel上 ,用戶單擊按鈕后,我想打開SecondViewModel並關閉FirstViewModel

var conductor = this.Parent as IConductor;
conductor.DeactivateItem(this, true);
conductor.ActivateItem(new SecondViewModel(param));

我已經嘗試這樣做:

((IApp)this.Parent).ActivateItem(new SecondViewModel(param));
TryClose();

SecondViewModel擴展了我的BaseScreen:

public class BaseSceen : Screen
{
   ...
}

我想關閉FirstViewModel,因為在FirstViewModel和SecondViewModel上我有快捷方式。 當我打開SecondViewModel時,我點擊了一個快捷方式,執行的方法來自FirstViewModel。 因此,FirstViewModel仍在運行。

如何關閉FirstViewModel,並通過快捷方式避免此問題?

謝謝!

您真的需要使用Conductor<T>.Collection.OneActive嗎? 您可以只使用Conductor<T>以便激活一個項目將自動停用並關閉先前處於活動狀態的項目。 而且,是否要求按鈕/動作對位於FirstViewModel 我建議您只將它們放在AppViewModel並讓它協調兩個子屏幕的導航和激活/停用。

public AppViewModel : Conductor<Screen>
{
    public void AppViewModel()
    {
        ActivateItem(new FirstViewModel());
    }

    public void ActivateSecondViewModel()
    {
        // FirstViewModel will automatically be deactivated
        // and closed since we are using plain Conductor<T>
        ActivateItem(new SecondViewModel());
    }
}

我找到了! 快捷方式事件附加到窗口,而不附加到用戶控件。 因此,事件在usercontrol結束時,事件仍“附加”到窗口。 現在,我添加了一個在卸載UserControl時調用的方法,以“取消附加”事件。 嚴重的錯誤!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM