0

我正在开发一个 Windows 8 应用商店应用程序(使用网格应用程序模板),当我从服务器加载数据时,我想显示ProgressRing并隐藏GridViewListView(取决于应用程序是否被捕捉)将显示数据一旦完全加载。

问题是当 ViewModel 加载数据时,我需要能够更改 VisualState。

我在这里找到了我认为的解决方案,但是这段代码不会构建。

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);
    }));
}

错误:无法将 lambda 表达式转换为类型“对象”,因为它不是委托类型

有谁知道如何让链接的解决方案工作?还是有一个我完全想念的更简单的方法(我是 XAML 新手!)?

我什至不确定列出的解决方案是否会起作用,因为“Snapped”与“Full”状态是由LayoutAwarePage模板中包含的基类管理的。

4

1 回答 1

1

为什么不简单地使用数据触发器绑定到像 IsBusy {get;set;} 这样的视图模型属性来启用您的 Progressring?

于 2013-05-24T07:46:19.280 回答