gpt4 book ai didi

c# - MVVM、ObservableCollection、异步等

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:37 26 4
gpt4 key购买 nike

所以,我正在进入下一阶段的教育,并且遇到了一些与我使用 SQLite 相关的障碍(这是一个通用应用程序,我目前的重点是它的 Windows Phone 方面解决方案)。我的问题在某种程度上与 SQLite 无关,但我将以它为例。

我正在将 SQLite 作为我的应用程序的数据库(基于此处和其他地方的各种建议和评论)。具体来说,我正在设计我的 View -> View 模型 -> 模型,但我不确定用于传递 ObservableCollection 的合适模式。

让我从模型开始。我正在调用 SQLite-net 的 QueryAsync() 方法。因此,在模型的深处,我对 QueryAsync() 的调用有任何等待。它所在的方法(为简单起见,我们称之为 GetData())被标记为异步。所以,这就是模型。

在 View 级别上,我需要绑定(bind)到 View 模型的属性。我们将该属性称为 GetDataVM()。因为它是我使用 getter 的属性——据我所知,我不能在 getter 中使用 await。真的吗?考虑到模型中的异步调用 - QueryAsync() - 看来我需要等待,对吗?

确定我在这里有一些基本假设是错误的。但我试图了解的基本原则是,当该属性调用模型中包含异步方法的方法时,我 View 中的控件必须绑定(bind)到什么。

我觉得这不是特别容易解释 :) 但是,回过头来看,我想要的在概念上非常简单。我想要一个控件绑定(bind)到一个 View 模型属性,该属性反过来从模型中检索数据,模型从 SQLite 中检索数据。

我很困惑:)

我们将不胜感激任何帮助(可能首先要澄清关于我到底想达到什么目的的问题:))。

谢谢。

最佳答案

我有一个 MSDN article on this topic .

要点是:正如其他人所指出的,属性读取应该是立即操作,而异步操作(一般来说)不是立即的。

因此,您首先需要做的是确定您的用户界面在加载数据时的外观。当您的 VM 加载时,它应该将其数据初始化为“正在加载”状态,并且当数据到达时,VM 应该更新到“就绪”状态(或者如果操作失败)。

在我的 MSDN 文章中,我介绍了一个 NotifyTaskCompletion<T>类型几乎只是 Task<T> 的数据绑定(bind)友好包装器.这允许您通过 XAML 绑定(bind)进行状态转换。

关于c# - MVVM、ObservableCollection、异步等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com