【发布时间】:2014-06-19 16:03:49
【问题描述】:
我必须单击两次才能在我的信使中接收消息我做错了什么?我认为我没有正确启动 Messenger 吗??
在我的 ViewModelLocator 类中:
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IPortabilityFactory, PortabilityFactory>();
SimpleIoc.Default.Register<INavigationService, NavigationService>();
SimpleIoc.Default.Register<IMessenger>((() => (IMessenger)new Messenger()));
bla bla...
}
bla bla...
在我的导航类中,我有:
public class NavigationService : INavigationService
{
private IMessenger _messenger { get; set; }
public NavigationService(IMessenger messenger)
{
_messenger = messenger;
}
bla bla...
public void NavigateToViewByChannelPage(Channel parameter)
{
//Sending info to ViewModel
_messenger.Send(new IdParameter() { Id = parameter.Id }, typeof(ViewByChannelPageViewModel));
//Going to page
this.Navigate(typeof(ViewByChannelPage));
}
bla bla...
这是我的第一个 VM,它调用 NavigationService 并将我导航到我的页面类:
private void NavigateToChannel(Channel chan)
{
if (chan != null)
{
SimpleIoc.Default.GetInstance<INavigationService>().NavigateToViewByChannelPage(chan);
}
}
这是我的第二个虚拟机,应该会收到消息页面:
public ViewByChannelPageViewModel(IMessenger messenger, IPortabilityFactory factory)
: base(messenger)
{
_factory = factory;
//Getting value passed
messenger.Register<IdParameter>(this, typeof(ViewByChannelPageViewModel), message => UpdateContentPane(message.Id));
}
private async void UpdateContentPane(string videoId)
{
Bla bla....
}
基本上我必须两次访问同一页面才能使信使第一次工作,然后一旦我这样做了,信使就会完美工作。
看来我必须启动信使?以前有人遇到过这个问题吗?如您所见,我是使用 MVVM Light 的新手...
感谢您的帮助!
如果您需要更多代码,请联系我们!
【问题讨论】:
标签: c# windows-8 mvvm-light windows-8.1 win-universal-app