gpt4 book ai didi

c# - 使用 MVVMLight 在 ViewModel 之间传递参数

转载 作者:太空狗 更新时间:2023-10-29 22:30:53 28 4
gpt4 key购买 nike

我在使用 MVVMLight 框架中的 Messenger 类在我的 ViewModel 之间传递参数时遇到问题。

这是我正在使用的代码:

ViewModelLocator

public ViewModelLocator ()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

SimpleIoc.Default.Register<INavigationService, NavigationService>();

SimpleIoc.Default.Register(() => new MainViewModel(NavigationService));
SimpleIoc.Default.Register(() => new SecondViewModel(NavigationService));
}

public MainViewModel MainViewModel
{
get { return SimpleIoc.Default.GetInstance<MainViewModel>(); }
}

public SecondViewModel SecondViewModel
{
get { return SimpleIoc.Default.GetInstance<SecondViewModel>(); }
}

public INavigationService NavigationService
{
get { return SimpleIoc.Default.GetInstance<INavigationService>(); }
}

主视图模型

private void ShowPersonDetailsCommand(object obj)
{
Messenger.Default.Send((Person)obj);
_navigationService.NavigateTo(new Uri("/SecondPage.xaml", UriKind.Relative))
}

第二 View 模型

public SecondViewModel(INavigationService navigationService)
{
_navigationService = navigationService;

Messenger.Default.Register<Person>(
this,
person =>
{
Person = person;
});
}

在我的 MainViewModel (ShowPersonDetailsCommand) 中,我导航到 SecondPage 并将一个人作为 Messenger 类中的参数发送。至此,这个人已经构建好并作为消息发送。

但在 SecondViewModel 构造函数中,person 为 null :(

有什么我想念的吗?

我觉得我做错了什么......

供您引用:

  • Windows Phone 8.1(银光)

  • MVVMLight 5.0.2

  • Visual Studio 2013 更新 4

最佳答案

我建议在 ViewModelLocator 中注册后立即创建 SecondViewModel。您可以使用 Register 的重载方法来做到这一点。

SimpleIoc.Default.Register<SecondViewModel>(true);

这将确保 Messenger 注册发生在消息发送之前。

关于c# - 使用 MVVMLight 在 ViewModel 之间传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347033/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com