繁体   English   中英

MVVM指示灯-推送通知

[英]MVVM light - push notifications

我正在尝试学习MVVM Light,并将其用于Windows Phone 8应用程序。 效果很好,但是我找不到任何教程或示例如何将推送通知与MVVM模式一起使用。

在我的MainPage中,我设置了HttpNotificationChannel,并且正在接收通知:

void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
        {
            StringBuilder message = new StringBuilder();
            string relativeUri = string.Empty;

            message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString());

            // Parse out the information that was part of the message.
            foreach (string key in e.Collection.Keys)
            {
                message.AppendFormat("{0}: {1}\n", key, e.Collection[key]);

                if (string.Compare(
                    key,
                    "wp:Param",
                    System.Globalization.CultureInfo.InvariantCulture,
                    System.Globalization.CompareOptions.IgnoreCase) == 0)
                {
                    relativeUri = e.Collection[key];
                }
            }

            // Display a dialog of all the fields in the toast.
            //Dispatcher.BeginInvoke(() => MessageBox.Show(message.ToString()));

        }

现在我不确定该怎么办。 我将收到大约5种不同类型的通知,这些通知应将应用导航到应用中的不同页面或刷新页面(或将一些数据保存到存储中)。 我怎样才能做到这一点? 当我搜索时,在mvvm light中找到了一些消息传递系统。 我可以将其用于通知吗? 我应该使用哪种类型的消息? 您能给我一些示例代码还是给我指向教程(文章/视频)。 谢谢

我肯定会使用MVVMlight的消息传递系统,因为它为您提供了清晰,耦合耦合的回调,您的视图模型可以订阅该回调。

在您的推送通知服务类中,公开了一些公共消息字符串,您的viewmodel可以侦听它们:

public static readonly string REFRESHCONTENTMESSAGE = "RefreshContent";
public static readonly string DELETECONTENTMESSAGE = "DeleteContent";

然后在您的视图模型中订阅Messenger:

Messenger.Default.Register<NotificationMessage>(this, HandleMessage);

最后设置处理程序:

public void HandleMessage(NotificationMessage message) {
    if (message.Notification.Equals(YourService.REFRESHCONTENTMESSAGE))
    {
        // Do stuff like navigating to a page.
    }
    else if (message.Notification.Equals(YourService.DELETECONTENTMESSAGE))
    {
        // Do something else.
    }
}

现在,您所要做的就是在收到新通知时从您的推送通知服务类发送一条消息:

Messenger.Default.Send<NotificationMessage>(new NotificationMessage(REFRESHCONTENTMESSAGE));

这只是一个简短的版本。 如果您正在寻找一个可以实际携带数据的版本,请选择带有内容的NotificationMessage(并使用通用方面调整上面的代码):

Messenger.Default.Send<NotificationMessage<MyObject>>(new NotificationMessage<MyObject>(REFRESHCONTENTMESSAGE));

// In your handler:
MyObject payload = message.Content;

如果您需要更深层次的自定义,则可以编写自己的消息类型。 但我认为您可以对现有的方法做得很好。 这样做的好处是,您可以显式地仅侦听特殊的消息类型,如果您要发送大量消息,则会减少应用程序内部的消息流量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM