双向数据绑定以及如何使用异步工作进行更新

时间:2017-08-29 11:41:51

标签: c# wpf asynchronous data-binding async-await

我正在为一组对象使用TwoWay数据绑定,但是当编辑该字段时,它需要更新到后端模型,而后端模型又需要调用异步库代码,但数据绑定绑定到属性而不是方法,所以我的问题是:

<击> 1。有没有办法在属性的Set方法中调用异步方法来做一些异步工作 2.或者有没有办法在方法而不是属性上进行数据绑定绑定,以便它可以像事件处理程序一样调用方法。

///

public class Model
{
    public int Field
    {
        get { return field; }
        set { field = value; await UpdateValue(field); } // won't compile
    }
}
编辑:我知道不支持异步属性,这个问题实际上并不是如何在语言中执行异步属性,因为大多数答案都集中在一起。这个问题集中在如何实现这个特定的设计问题上,我可以想象在使用数据绑定时会有很多这样的问题。 假设数据项绑定到网络服务或数据库,然后在更新路径中,需要执行await socket.SendAsync(value)await db.SaveChanges(value)。解决这种情况的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您无法等待属性中的方法。您可能应该问自己是否应该使用启动异步后台操作的命令替换该属性。一般来说,属性只能获取和设置后备字段的值,并应立即执行。

在实现异步数据绑定属性时,您可以参考@Stephen Cleary的MSDN杂志关于该主题的文章。

异步编程:异步MVVM应用程序的模式:数据绑定: https://msdn.microsoft.com/en-us/magazine/dn605875.aspx

答案 1 :(得分:1)

无法等待属性中的方法调用。

我想象的唯一办法就是从setter调用一个方法,并在这个方法中对库代码进行异步调用。

此主题类似于您的问题:How to call an async method from a getter or setter?