你好,我需要mvvm灯的帮助。
我想在构造函数中设置属性。但它的召唤只有一次。我有一个viewModel和一个视图。我通过ViewModelLocator从另一个viewModel调用viewModel。在第一次,当我调用viewModel所有工作正常,但当我调用viewModel在其他时间它不工作,因为它是创建的viewModel和它的构造函数已经调用。我怎么能重置(或任何)的viewModelLocator,所以他调用构造函数每次当我调用viewModelLocator。
在下面的代码中,我调用另一个viewModel:
var viewModel= (new ViewModelLocator()).TestVM;
viewModel.Item = _item;
Messenger.Default.Send(new NotificationMessage("testView"));
MVVMLight的ViewModelLocator
不是设计为直接在代码中实例化的。在它的构造函数中,你应该注册所有你知道的依赖项。然后你的ViewModels将把所有依赖作为构造函数参数,如下所示:
public MainViewModel(IMessenger messenger, IDialogService dialogService)
{
// Use messenger and dialogService
// ...
}
当你使用定位器实例将ViewModel设置为视图中的DataContext
时,ViewModelLocator会尝试解析所有必要的依赖项。
请注意,SimpleIoc
容器的默认行为是缓存所有创建的对象,所以你的构造函数都不会被调用两次。