상속: ViewModelBase
 public static void SaveSettingsData(Settings latestSettingsData)
 {
     using (var userIsoStorage = IsolatedStorageFile.GetUserStoreForApplication())
     {
         if (userIsoStorage.FileExists("settingsData.dat"))
         {
             userIsoStorage.DeleteFile("settingsData.dat");
         }
         using (var iss = userIsoStorage.CreateFile("settingsData.dat"))
         {
             SilverlightSerializer.Serialize(latestSettingsData, iss);
         }
     }
 }
 public static void SaveImplementedSettings(Settings latestImplementedSettings)
 {
     using (var userIsoStorage = IsolatedStorageFile.GetUserStoreForApplication())
     {
         if (userIsoStorage.FileExists("LastImplementedSettings.dat"))
         {
             userIsoStorage.DeleteFile("LastImplementedSettings.dat");
         }
         using (var iss = userIsoStorage.CreateFile("LastImplementedSettings.dat"))
         {
             SilverlightSerializer.Serialize(latestImplementedSettings, iss);
         }
     }
 }
        public static Settings GetSettingsData()
        {
            using (var userIsoStore = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (userIsoStore.FileExists("settingsData.dat"))
                {
                    using (var iss = userIsoStore.OpenFile("settingsData.dat", System.IO.FileMode.Open))
                    {
                        return SilverlightSerializer.Deserialize(iss) as Settings;
                    }
                }
                else
                {
                    Settings newSettingsData = new Settings();

                    return newSettingsData;
                }
            }
        }
        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public MainViewModel()
        {
            if (IsInDesignMode)
            {
                // Code runs in Blend --> create design time data.
            }
            else
            {
                // Code runs "for real"
            }

            _appSettings = SettingsService.GetSettingsData();
            // Set everything
            IsUsingToast = _appSettings.IsUsingToast;
            IsUsingSimpleTile = _appSettings.IsUsingSimpleTile;
            IsUsingLiveTile = _appSettings.IsUsingLiveTile;

            _pushNotificationService = new PushNotificationService();
            _pushNotificationService.GotPushUri += new System.EventHandler<GotPushUriEventArgs>(_pushNotificationService_GotPushUri);
        }
        public void GetPushSubscription(Settings _latestSettings)
        {
            _appSettings = _latestSettings;

            try
            {
                //Step 1: See if we already have a valid HttpNotificationChannel
                _notificationChannel = HttpNotificationChannel.Find(_pushChannelName);
            } catch { }

            // If we have already implemented the channel && if nothing has
            //      changed in the settings since last time
            if (_notificationChannel != null && DoSettingsMatch(_appSettings, _previousSettings))
            {
                // Step 2: Make sure we got the channel Uri appropriately
                if (_notificationChannel.ChannelUri != null)
                {
                    // Success!
                    RaiseGotPushUri(_notificationChannel.ChannelUri);
                }
                else
                {
                    // If we never got the Uri back, unbind and reset everything...
                    this.UnbindAndResetPush();
                    // Step 3: ... and re-register the event handlers
                    _notificationChannel = new HttpNotificationChannel(_pushChannelName);
                    _notificationChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(_notificationChannel_ChannelUriUpdated);
                    _notificationChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(_notificationChannel_HttpNotificationReceived);
                    _notificationChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(_notificationChannel_ErrorOccurred);
                    // Step 4: Ask for a new Uri
                    _notificationChannel.Open();
                    // Step 5: Set the HttpNotificationChannel to handle
                    //      the appropriate push notifications
                    BindNotifications(_notificationChannel);
                }
            }
            else
            {
            // Step 3: Register the event handlers so we can handle when we get
            //      the channel information (or errors) back.
            _notificationChannel = new HttpNotificationChannel(_pushChannelName);
            _notificationChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(_notificationChannel_ChannelUriUpdated);
            _notificationChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(_notificationChannel_HttpNotificationReceived);
            _notificationChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(_notificationChannel_ErrorOccurred);

            try
            {
            // Step 4: Ask for a new Uri
            _notificationChannel.Open();
            // Step 5: Set the HttpNotificationChannel to handle
            //      the appropriate push notifications
            BindNotifications(_notificationChannel);
            // Now that we've implememted the settings, let's save them so we can remember
            //  them next time.
            SettingsService.SaveImplementedSettings(_appSettings);
            _previousSettings = _appSettings;
            }
            catch (Exception err)
            {
            // Oops! Something went wrong, null out the channel.
            _notificationChannel = null;
            }
            }
        }
 private bool DoSettingsMatch(Settings _newSettings, Settings _oldSettings)
 {
     if ((_newSettings.IsUsingSimpleTile == _oldSettings.IsUsingSimpleTile) &&
         (_newSettings.IsUsingLiveTile == _oldSettings.IsUsingLiveTile) &&
         (_newSettings.IsUsingToast == _oldSettings.IsUsingToast))
     {
         return true;
     }
     else
     {
         return false;
     }
 }