質問

I'm working on a Windows 8 Store App (using the Grid App Template) and while I'm loading data from a server I want to show a ProgressRing and hide the GridView or ListView (depends on if the app is snapped or not) that will display the data once it is fully loaded.

The issue is that when the ViewModel is loading data I need to be able to change the VisualState.

I found what I thought was a solution Here, but this code will not build.

public class StateManager : DependencyObject
{
    public static string GetVisualStateProperty(DependencyObject obj)
    {
        return (string)obj.GetValue(VisualStatePropertyProperty);
    }

    public static void SetVisualStateProperty(DependencyObject obj, string value)
    {
        obj.SetValue(VisualStatePropertyProperty, value);
    }

    public static readonly DependencyProperty VisualStatePropertyProperty =
        DependencyProperty.RegisterAttached(
        "VisualStateProperty",
        typeof(string),
        typeof(StateManager),
        new PropertyMetadata((s, e) =>  //this throws the error
        {
        var propertyName = (string)e.NewValue;
        var ctrl = s as Control;
        if (ctrl == null)
            throw new InvalidOperationException("This attached property only supports types derived from Control.");
        System.Windows.VisualStateManager.GoToState(ctrl, (string)e.NewValue, true);
    }));
}

ERROR: Cannot convert lambda expression to type 'object' because it is not a delegate type

Does anyone know how to get the linked solution to work? Or is there a simpler method that I am completely missing (I'm a XAML newbie!)?

I'm not even sure if the listed solution will work because the "Snapped" vs "Full" states are managed by the base LayoutAwarePage class included with the template.

役に立ちましたか?

解決

why not simply use a datatrigger bind to a viewmodel property like IsBusy {get;set;} to enable your Progressring?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top