【发布时间】:2019-04-24 06:51:22
【问题描述】:
我在InitializeDataViewer() 中有一些代码,每次加载一个视图时都需要执行这些代码。我将代码保存在ViewModel 构造函数中。当我回来取回那个视图时,我的问题就出现了——构造函数没有被执行。有什么方法可以销毁 ViewModel 对象或其他方式来执行构造函数代码?
public Data_Viewer_View_Model()
{
InitializeDataViewer();//this has to be executed eachtime the view is loaded.
dataViewerModel = new Data_Viewer_Model();
objBackToDatabase = new ButtonCommand<string>(dataViewerModel.BackToDatabase, dataViewerModel.IsValid);
objBackToDatabase.ReturnValueChanged += objBackToDatabase_ReturnValueChanged;
}
InitializeDataViewer() 初始化了一些绑定的变量,但由于它没有被初始化,所以显示了旧值。
【问题讨论】:
-
为什么不在构造函数中包含该代码,为什么不在窗口加载/激活事件中包含它?
-
在尝试 mvvm 模式时有可能吗?感谢@peeyush 抽出宝贵时间。
-
我认为MVVM模式在这里没有任何关系,目前你的方法调用是在viewModel中,如果你把它移到窗口加载事件中,那么它也会在viewModel中,所以在这里不相关.现在您在 InitializeDataViewer 中所做的事情以及是否应该在 viewModel 中可能是更相关的问题,但是由于我不知道里面是什么,所以我无法回答。
-
您还没有解释为什么视图模型被持久化以及视图模型及其实例化如何与视图相关。听起来有些东西正在保留对您的视图的引用,并且保留了对视图模型的引用。您可以将初始化代码移动到视图模型中的公共方法,从 ctor 调用它,并且无论何时执行您正在执行的操作。