Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM通知用户界面_C#_Mvvm_Windows Phone 8 - Fatal编程技术网

C# 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

注意:请原谅我的英语。这不是我的母语,我有时拼错或用错了时间

情况描述 首先,我将描述情况

我正在使用Windows Phone 8应用程序(WP8.0w/.NET 4.5中的C#/XAML)。这是我的第一个WP8应用程序,周围没有多少人可以帮助我,所以我正在网上自学教程和几本书(换句话说,我是新手,没有那么多经验)

我从Web服务(我将在后面介绍)收集的数据量“不太大”,我决定使用模型视图模型(MVVM)来存储它提供的数据

MVVM结构: 这只是我的MVVM结构的伪图,下面是描述

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)

网站服务已经提供给我,我无法更改,我只能使用它们。

“问题” 我正试图找出一种好方法,向我的页面发出信号,表示事情已经完成。例如登录顺序:

  • 我有一个包含两个文本框的页面,其中的值绑定到MainViewModel属性用户名和密码,还有一个按钮绑定到MainViewModel中的命令登录

  • login命令只触发“doLogin”方法,该方法使用用户名和密码属性,并在添加webservice时将其作为凭据提供给Visual Studio自动生成的webserviceclient实例,客户端执行其中一个webservice方法(异步方法)-例如login

  • 当此方法完成时,它将引发与其关联的已完成事件,并在其CompletedArguments中提供结果对象

  • 在完成的事件中,我将数据从结果对象复制到viewModel

  • 此时,最好向UI发出一些信号,说明登录任务已经完成,它应该导航到另一个页面。

    我该怎么做?

    有什么更好的方法吗?


    附言:如果你对这里所描述的事情有什么建议,我会很高兴听到的。还请记住,我是新手,所以有时我需要对假人进行解释,或者被一些基本的和/或愚蠢的东西卡住。

    通常,您只需更改数据即可从视图模型通知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...