gpt4 book ai didi

c# - 到 UI 的 MVVM 通知

转载 作者:太空狗 更新时间:2023-10-30 01:05:18 26 4
gpt4 key购买 nike

注意:请原谅我的英语。这不是我的母语 - 我有时拼写错误或使用错误的时间

情况描述

首先,我将描述情况。

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

我从 收集的数据量“不是那么大”网络服务 (我稍后会描述)我决定使用 模型- View - View 模型 (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...

我有 主 View 型号 包含少量属性和少量命令(实现 ICommand)以及几个模型的对象,这些模型包含其他属性和可观察集合。

MainViewModel 不是一次填充数据,而是随着用户浏览应用程序并请求它的时间而填充。 主要是因为有更多的网络服务可以从中收集 - 一些数据必须根据用户指定的标准收集(例如从哪个日期到哪个日期等)

我决定创建一个“持久” (不知道这个词对不对) ViewModel 将出现在整个应用程序中,因为我有时需要在页面 中组合来自多个模型的数据

例如,我需要始终在页面上始终显示的“userInfoBar”中显示一些基本用户信息 + 我需要一些来自 DataGroup1Model 的信息和一些来自 DataGroup2Model 的信息(这些信息由来自两个 Web 服务的数据填充,并用于更多组合,然后就是这个一)。

网页服务

我正在使用 web 服务来收集数据以填充 viewModel。具体来说,一个具有 9 种方法的 Web 服务,不知道如何描述它 - 每一种方法都为我提供有关某事的数据,这些数据我存储在 datagroupModels 中(有时是两个 datagroupmodels,如personalinfoModel 和Datagroup1Model)。

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

问题”

我正在尝试找出一种向我的页面发出信号表明某事已完成的好方法。例如登录顺序:
  • 我有一个页面,其中包含两个文本框,它们的值绑定(bind)到 MainViewModel 属性用户名和密码,以及一个绑定(bind)到 MainViewModel 中的命令登录的按钮。
  • 登录命令只是启动“doLogin”方法,该方法使用用户名和密码属性并将其作为凭据提供给在添加 web 服务时由 Visual Studio 自动生成的 webserviceclient 实例,并且客户端执行其中一种 web 服务方法(异步方法) - 对于示例登录。
  • 当此方法完成时,它会引发与之关联的 Completed 事件并提供 结果在其 CompletedArguments 中的对象。
  • 在完成的事件中,我将数据从 Result 对象复制到 viewModel。

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

    我该怎么做?

    有一些首选的方法吗?

    P.S.:如果您对此处描述的内容有任何建议,我将很高兴听到。还请记住,我是一个菜鸟,所以我有时需要解释傻瓜或卡在一些基本和/或愚蠢的事情上。

    最佳答案

    通常,您只需更改数据即可从 View 模型通知 UI。例如,您可以在 State 中维护一些一般的“状态”。 UI 中绑定(bind)的属性。然后,UI 可以根据该属性的值显示不同的内容。您通常使用数据触发器来执行此操作。如果它不那么复杂,您也可以只使用一个 bool 值来告诉您IsDataLoaded或其他东西,即如果您已经从 Web 服务加载了数据。或者更简单,如果你想在 View 中显示结果,你只需要一个属性 Result你绑定(bind)到哪个。只要您还没有加载数据,该值为 null 并且 View 将显示登录表单。如果数据不为空(即数据已加载),它将只显示数据。

    至于导航,通常导航的每个页面都有自己的 View 模型。因此,如果您从登录屏幕开始,您将拥有一个“登录 View 模型”,如果下一页是数据可视化,您将拥有一个“数据 View 模型”。通常这是使用数据模板完成的。数据模板是依赖于类型的模板。您将拥有一个“元” View 模型,它基本上只有一个用于当前显示的 View 模型的插槽。然后对于每种可能的类型,您将定义一个数据模板,为特定的 View 模型类型定义其 View 。然后导航,您所做的就是更改元 View 模型中的当前 View 模型。

    关于c# - 到 UI 的 MVVM 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377191/

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