因此,我正在进入下一阶段的教育,并且已经遇到了与 SQLite 使用相关的一些障碍(这是一个通用应用程序,我当前的重点是该解决方案的 Windows Phone 方面)。我的问题在某种程度上独立于 SQLite,但我将使用它作为示例。
我正在将 SQLite 作为我的应用程序的数据库(基于此处和其他地方的各种建议和评论)。具体来说,我正在设计视图 -> viewmodel -> 模型,但我不确定传递 ObservableCollection 的适当模式。
让我从模型开始。我正在调用 SQLite-net 的 QueryAsync() 方法。因此,在模型深处,我对 QueryAsync() 的调用有任何等待。该方法所在的方法(为简单起见,我们将其称为 GetData())被标记为 async。所以,这就是模型。
在视图级别,我需要绑定到视图模型的属性。我们将该属性称为 GetDataVM()。因为它是一个属性,所以我使用 getter - 而且据我所知,我不能在 getter 中使用 wait 。真的吗?鉴于模型中的异步调用 - QueryAsync() - 看来我需要等待,对吗?
I am sure我在这里有一些基本假设是错误的。但我试图理解的基本原则是,当该属性调用模型中包含异步方法的方法时,我视图中的控件必须绑定到什么。
我觉得这不是特别容易解释:)但是,退一步说,我想要的在概念上非常简单。我想要一个控件绑定到 viewmodel 属性,该属性反过来从模型检索数据,模型从 SQLite 检索数据。
我很困惑:)
任何帮助将不胜感激(可能从澄清有关我到底想要实现什么目标的问题开始:))。
Thanks.
我有一个有关此主题的 MSDN 文章 http://msdn.microsoft.com/en-us/magazine/dn605875.aspx.
其要点是:正如其他人所指出的,属性读取应该是立即操作,而异步操作(一般来说)不是立即操作。
因此,您首先需要做的是决定您的 UI 的外观while数据正在加载。当您的虚拟机加载时,它应该将其数据初始化为“加载”状态,并且当数据到达时,虚拟机应该update到“就绪”状态(如果操作失败,则到“错误”状态)。
在我的 MSDN 文章中,我介绍了NotifyTaskCompletion<T>
类型几乎只是一个数据绑定友好的包装器Task<T>
。这允许您通过 XAML 绑定进行状态转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)