public
Last active

StateHelper

  • Download Gist
statehelper.cs
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 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);
}
}
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.