【问题标题】:MVVM Light - ViewModelLocator, set PropertysMVVM Light - ViewModelLocator,设置属性
【发布时间】:2015-09-18 14:09:30
【问题描述】:

您好,我需要有关 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"));

【问题讨论】:

  • 你的Locator和ViewModel里面是static吗?

标签: c# properties viewmodel mvvm-light viewmodellocator


【解决方案1】:

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

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

当您使用定位器实例在视图中将 ViewModel 设置为 DataContext 时,ViewModelLocator 会尝试解析所有必要的依赖关系。

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

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 1970-01-01
    • 2016-12-26
    • 2015-09-26
    • 1970-01-01
    • 2016-02-03
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多