我必须点击两次才能在我的信使中收到一条消息我做错了什么?我是不是正确启动了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...
这是我的第一个调用NavigationService的VM,它将我导航到我的页面类:
private void NavigateToChannel(Channel chan)
{
if (chan != null)
{
SimpleIoc.Default.GetInstance<INavigationService>().NavigateToViewByChannelPage(chan);
}
}
这是我的第二个应该收到消息页面的VM:
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的新手......
谢谢您帮忙!
如果您需要更多代码请求!
答案 0 :(得分:0)
问题来自我的导航类,我需要初始化我的ViewByChannelPageViewModel才能传递一个值:
public void NavigateToViewByChannelPage(Channel parameter)
{
//Must create an instance so that the page can recieve the info
Needed this --> SimpleIoc.Default.GetInstance<ViewByChannelPageViewModel>();
//Sending info to ViewModel
_messenger.Send(new IdParameter() {Id = parameter.Id});
//Going to page
this.Navigate(typeof(ViewByChannelPage));
}
顺便说一下:如果你有更好的导航方式或改进方法,我可以在这段代码中做出来,我全都听见了! THX