[英]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.