【问题标题】:Why does await triggers the data binding process?为什么 await 会触发数据绑定过程?
【发布时间】:2021-11-09 18:29:31
【问题描述】:

我开始在我的 WPF 应用程序中使用 await / async。我意识到尽管应用程序正常工作,但出现了大量的绑定错误。我发现了错误,DataContext 设置得太晚了。 使用下一行时出现绑定错误:

var viewAccounts = await db.ViewAccounts.Where(e => e.ActiveAssetAcount == true).ToListAsync();

但如果我使用同步版本,则不会出现绑定错误(尽管DataContext 尚未设置)。

var viewAccounts = db.ViewAccounts.Where(e => e.ActiveAssetAcount == true).ToList();

差异的原因是什么?在我设置DataContext之前,有没有办法禁用数据绑定过程?

【问题讨论】:

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


    【解决方案1】:

    等待方法不会触发数据绑定过程。

    与其尝试“在设置DataContext 之前禁用数据绑定过程”,不如立即设置DataContext,然后在异步方法返回并获得所有信息后设置数据绑定属性。

    确保您实现INotifyPropertyChanged 以在属性更新时通知视图。

    【讨论】:

    • 我知道await 的目的是等待Task 的完成。尽管如此,我已经看到,如果我使用ToList,则没有绑定错误,如果我使用ToListAsync,则会出现绑定错误。会不会有什么副作用? (更有趣的是我将数据存储在局部变量中而不是绑定属性中)
    • ToList() 同步阻止数据绑定和其他所有内容,ToListAsync 返回最终完成的Task。这就是区别。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2012-01-09
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多