MVVM Light - ViewModelLocator,设置Propertys

时间:2015-09-18 14:09:30

标签: c# properties viewmodel mvvm-light viewmodellocator

您好我需要mvvm light的帮助。

我想在构造函数中设置属性。但它只召唤一次。 我有一个viewModel和一个视图。我通过ViewModelLocator从另一个viewModel调用viewModel。第一次,当我调用viewModel时,一切正常,但是当我在其他时间调用viewModel时,它不起作用,因为它创建了viewModel并且已经调用了它的构造函数。我如何重置(或其他)viewModelLocator,以便每次调用viewModelLocator时都调用构造函数。

在下面的代码中,我正在调用另一个viewModel:

var viewModel= (new ViewModelLocator()).TestVM;
viewModel.Item = _item;
Messenger.Default.Send(new NotificationMessage("testView"));

1 个答案:

答案 0 :(得分:0)

MVVMLight的ViewModelLocator并非旨在直接在您的代码中实例化。在它的构造函数中,您应该注册您知道的所有依赖项。然后,您的ViewModel将所有依赖项作为构造函数参数,如下所示:

public MainViewModel(IMessenger messenger, IDialogService dialogService)
{
    // Use messenger and dialogService
    // ...
}

使用定位器实例在View中将ViewModel设置为DataContext时,ViewModelLocator会尝试解析所有必要的依赖项。

请注意SimpleIoc容器的默认行为是缓存所有创建的对象,因此不会调用任何构造函数两次。