Skip to content

Instantly share code, notes, and snippets.

@Nilzor
Created November 15, 2012 13:04
Show Gist options
  • Save Nilzor/4078545 to your computer and use it in GitHub Desktop.
Save Nilzor/4078545 to your computer and use it in GitHub Desktop.

Revisions

  1. Nilzor created this gist Nov 15, 2012.
    53 changes: 53 additions & 0 deletions statehelper.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using GalaSoft.MvvmLight.Messaging;
    using GTWin8.Messages;
    using GTWin8.Ui;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;

    namespace MvvmHelpers
    {
    /// <summary>
    /// Copied from http://stackoverflow.com/questions/6002046/binding-visualstatemanager-view-state-to-a-mvvm-viewmodel
    /// </summary>
    public class StateHelper : DependencyObject
    {
    public static readonly DependencyProperty StateProperty = DependencyProperty.RegisterAttached(
    "State", typeof(String), typeof(StateHelper), new PropertyMetadata("Normal", StateChanged));


    internal static void StateChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
    {
    try
    {
    string newState = (string)args.NewValue;
    Debug.WriteLine(String.Format("Attempting change from {0} to {1} on {2} ",args.OldValue, newState, target));
    if (args.NewValue != null)
    {
    bool res = VisualStateManager.GoToState((Control)target, newState, true);
    Messenger.Default.Send<StateChangedMessage>(new StateChangedMessage { Control = (Control)target, NewState = newState });
    Debug.WriteLine("Result: " + res);
    }
    }
    catch (Exception ex)
    {
    System.Diagnostics.Debug.WriteLine("StateHelper: " + ex.Message);
    }
    }

    public static void SetState(DependencyObject obj, string value)
    {
    obj.SetValue(StateProperty, value);
    }

    public static string GetState(DependencyObject obj)
    {
    return (string)obj.GetValue(StateProperty);
    }
    }
    }