4

问题在于将长时间操作 getter 绑定到 UI 控件。例如,如果我有这样的属性:

public string ButtonText
{
    get
    {
        Task.Delay(3000).Wait();
        return _buttonText;
    }
    set
    {
        _buttonText = value;
    }
}

并将其在 XAML 中绑定到 UI 控件,例如:Content="{Binding ButtonText}"UI 线程将被阻止。WPF 中有一个Binding.IsAsync属性允许在后台加载绑定的数据,但 Metro 框架中没有这样的属性。

有人对如何在 Metro 应用程序中进行异步绑定有任何想法吗?

4

1 回答 1

-1

微软故意改变了一堆这样的事情,以鼓励你不要在你的属性 getter/setter 中做那些需要你异步获取属性的事情。不阻塞 UI 线程的“新”方法是执行类似await Task.Delay(3000)而不是使用Binding.IsAsync. await阻止执行,但不阻止线程(正是你想要做的)。

await这是有关 .NET 4.5 上 C# 中的关键字的更多信息的页面。页面底部的示例很好地说明了您的代码应该是什么样子。

http://msdn.microsoft.com/en-us/library/hh156528.aspx

于 2012-10-08T21:29:08.227 回答