注意:请原谅我的英语,这不是我母语 - 我有时会拼错单词或使用错误的时态
情况描述
首先,我将描述一下情况。
我正在开发一个 Windows Phone 8 应用程序 (WP8.0,使用 .NET 4.5 和 C#/XAML)。这是我的第一个 WP8 应用程序,周围没有太多人可以帮助我,所以我通过在网络上的教程和一些书籍学习 (换句话说,我是个新手,经验不足)。
我从一个 Web服务(稍后会描述)中收集了“不太多”的数据,并决定使用 Model-View-ViewModel (MVVM) 来存储提供的数据。
MVVM 结构:
以下是 MVVM 结构的伪示意图,下面附有说明。
MainViewModel
--------------
|
+ several properties (Username, Password, etc...)
|
+ Commands (loadData1, loadData2, flush, ... - implementations of ICommand)
|
+ ------ PersonalInfoModel
| -----------------
| + several properties (name, surname, phonenumber, etc...)
|
|
+ ------ DataGroup1Model
| ---------------
| +several properties
| +ObservableCollection<Item1> (roughly 0 - 50 items)
| +ObservableCollection<Item2> (roughly 0 - 5 items)
| +ObservableCollection<string> (roughly 0 - 5 items)
|
| Item1 Item2
| ----- -----
| +several properties +several other properties
|
|
+ ------ DataGroup2Model (similar to previous)
...et cetera...
我有一个包含几个属性和几个命令(实现ICommand)以及多个模型的MainViewModel对象。这些模型包含其他属性和ObservableCollections。
MainViewModel不会一次性填充数据,而是随着用户浏览应用程序并请求数据而逐步填充。主要是因为有更多的Web服务需要从中收集数据 - 其中一些数据必须根据用户指定的条件(例如从哪个日期到哪个日期等)进行收集。
我决定创建一个“持久”(不确定是否是正确的词)的ViewModel,该ViewModel将在整个应用程序中存在,因为有时需要在页面中组合来自多个模型的数据。
例如,我需要始终在“userInfoBar”中显示一些基本用户信息,该信息始终存在于页面上,还需要一些来自DataGroup1Model和DataGroup2Model的信息(这些信息通过两个Web服务中的数据填充,并且用于更多的组合)。
我使用Web服务收集数据来填充ViewModel。具体地说,我使用一个具有9种方法的Web服务,不确定如何描述它 - 每种方法都为我提供有关某些内容的数据,我将其存储在datagroupModels中(有时是两个datagroupmodels,例如personalinfoModel和Datagroup1Model)。
Web服务已经提供给我,我无法更改它们,我只能使用它们。
“问题”
我正在尝试找出一种好的方法,向我的页面发出某些任务完成的信号。例如登录序列:
1. 我有一个包含两个TextBoxes的页面,它们的值绑定到MainViewModel属性UserName和Password以及绑定到MainViewModel中的Command Login的Button。 2. 登录命令只是启动“doLogin”方法,该方法使用用户名和密码属性,并将其作为凭据提供给Visual Studio自动生成的webserviceclient实例,客户端执行其中一个Web服务方法(异步方法) - 例如登录。 3. 当此方法完成时,它会引发与之关联的Completed事件,并在其CompletedArguments中提供Result对象。 4. 在完成事件中,我将数据从Result对象复制到viewModel中。
此时,向UI发出一些信号表明登录任务已完成并且应导航到另一页将是不错的。
我该如何做呢?是否有首选的方法?
P.S.:如果您对这里描述的内容有建议,我将很乐意听取。请记住,我是个新手,有时需要解释或在某些基本或愚蠢的事情上卡住。