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