C# MVVM通知用户界面
注意:请原谅我的英语。这不是我的母语,我有时拼错或用错了时间 情况描述 首先,我将描述情况 我正在使用Windows Phone 8应用程序(WP8.0w/.NET 4.5中的C#/XAML)。这是我的第一个WP8应用程序,周围没有多少人可以帮助我,所以我正在网上自学教程和几本书(换句话说,我是新手,没有那么多经验) 我从Web服务(我将在后面介绍)收集的数据量“不太大”,我决定使用模型视图模型(MVVM)来存储它提供的数据 MVVM结构: 这只是我的MVVM结构的伪图,下面是描述C# MVVM通知用户界面,c#,mvvm,windows-phone-8,C#,Mvvm,Windows Phone 8,注意:请原谅我的英语。这不是我的母语,我有时拼错或用错了时间 情况描述 首先,我将描述情况 我正在使用Windows Phone 8应用程序(WP8.0w/.NET 4.5中的C#/XAML)。这是我的第一个WP8应用程序,周围没有多少人可以帮助我,所以我正在网上自学教程和几本书(换句话说,我是新手,没有那么多经验) 我从Web服务(我将在后面介绍)收集的数据量“不太大”,我决定使用模型视图模型(MVVM)来存储它提供的数据 MVVM结构: 这只是我的MVVM结构的伪图,下面是描述 MainVi
MainViewModel
--------------
|
+几个属性(用户名、密码等)
|
+命令(loadData1、loadData2、flush、…-ICommand的实现)
|
+----个性化信息模型
| -----------------
|+多个属性(姓名、姓氏、电话号码等)
|
|
+----数据组1模型
| ---------------
|+若干财产
|+可观察收集(约0-50项)
|+可观察收集(约0-5项)
|+可观察收集(约0-5项)
|
|项目1项目2
| ----- -----
|+多个属性+多个其他属性
|
|
+----DataGroup2Model(类似于前面的)
……等等。。。
我有MainViewModel对象,其中包含一些属性和命令(实现ICommand),还有一些模型,其中包含其他属性和可观察集合
MainViewModel不是一次由数据填充的,而是随着用户浏览应用程序并请求它的时间的推移而填充的。主要是因为有更多的Web服务可以从中收集数据-一些数据必须根据用户指定的标准(如从哪个日期到哪个日期等)收集
我决定创建一个“持久的”(不确定这个词是否正确)ViewModel,它将出现在整个应用程序中,因为我有时需要在页面中组合来自多个模型的数据
例如,我需要始终在“userInfoBar”中显示一些基本的用户信息,这些信息始终显示在页面上+我需要一些来自DataGroup1Model的信息和一些来自DataGroup2Model的信息(这些信息由来自两个Web服务的数据填充,并且在多个组合中使用,而不仅仅是这个组合)
网络服务
我正在使用webservices收集数据以填充viewModel。特别是一个有9个方法的Web服务,不确定如何描述它-每个方法都会给我一些数据,我将这些数据存储在datagroupModels中(有时是两个datagroupModels,比如personalinfoModel和Datagroup1Model)
网站服务已经提供给我,我无法更改,我只能使用它们。
“问题”
我正试图找出一种好方法,向我的页面发出信号,表示事情已经完成。例如登录顺序:
附言:如果你对这里所描述的事情有什么建议,我会很高兴听到的。还请记住,我是新手,所以有时我需要对假人进行解释,或者被一些基本的和/或愚蠢的东西卡住。通常,您只需更改数据即可从视图模型通知UI。例如,您可以在绑定到UI中的
state
属性中维护一些常规“状态”。然后,UI可以根据属性的值显示不同的内容。您通常使用数据触发器来实现这一点。如果不那么复杂,您也可以使用一个布尔值,它将告诉您isataloaded
或其他信息,即如果您已经从web服务加载了数据。或者更简单,如果您想在视图中显示结果,您只需要绑定一个属性result
。只要您没有加载数据,该值就为null,视图将显示登录表单。如果数据不为空(即数据已加载),则只显示数据
至于导航,通常每个导航页面都有自己的视图模型。因此,如果您从一个登录屏幕开始,您将有一个“登录视图模型”,如果下一页是数据可视化,您将有一个“数据视图模型”。通常这是使用数据模板完成的。数据模板是依赖于类型的模板。您将拥有一个“元”视图模型,它基本上只为当前显示的视图模型提供一个插槽。然后,对于每种可能的类型,您将定义一个数据模板
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...