首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我的ViewModel的构造函数应该填充ViewModel的数据吗?

在MVVM(Model-View-ViewModel)架构中,ViewModel是连接View和Model的桥梁,负责处理View的展示逻辑和与Model的交互。ViewModel的构造函数通常用于初始化ViewModel的属性和依赖项。

在一般情况下,ViewModel的构造函数不应该填充ViewModel的数据。ViewModel的数据应该通过与Model进行交互来获取。这样做的好处是将数据获取逻辑与视图逻辑分离,使得ViewModel更加可复用和可测试。

ViewModel的主要职责是将Model的数据转换为View所需的格式,并提供与View交互的命令和事件。它应该暴露一些公共的属性和方法,供View绑定和调用。

对于数据的获取,可以在ViewModel中定义一个方法或属性,通过调用该方法或属性来获取数据。这个方法或属性可以调用Model层的服务或仓储来获取数据,并将获取到的数据进行处理后,赋值给ViewModel的属性。

在实际开发中,可以使用一些框架或库来帮助实现MVVM架构,例如在前端开发中可以使用Vue.js、React等,后端开发中可以使用ASP.NET MVC、Spring MVC等。这些框架或库提供了一些便捷的方式来实现ViewModel的构建和数据绑定。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各种业务需求。产品介绍链接
  • 腾讯云云数据库MySQL版:高性能、可扩展的关系型数据库服务。产品介绍链接
  • 腾讯云对象存储(COS):安全、稳定、低成本的云端存储服务。产品介绍链接
  • 腾讯云人工智能:提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网通信(IoT):提供全面的物联网解决方案,帮助连接和管理物联网设备。产品介绍链接
  • 腾讯云移动推送:提供高效、稳定的消息推送服务,帮助开发者实现消息推送功能。产品介绍链接
  • 腾讯云区块链服务(BCS):提供一站式区块链解决方案,帮助企业快速搭建和管理区块链网络。产品介绍链接
  • 腾讯云云原生应用引擎(TKE):提供高度可扩展的容器化应用管理平台,简化应用的构建、部署和管理。产品介绍链接

请注意,以上仅为腾讯云相关产品的示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你真的了解ViewModel设计思想

引言 在Android开发中,数据管理是一个至关重要问题。随着应用复杂度增加,我们需要一种能够有效管理数据和处理UI相关逻辑机制。Android架构组件中ViewModel应运而生。...ViewModel是一种设计模式,它目标是将UI控制器(Activity、Fragment等)与数据分离,同时保持UI状态。...在Android中,ViewModel通常用于存储和管理与UI相关数据,以确保这些数据在屏幕旋转或配置更改等情况下不会丢失。 原理解析 ViewModel原理是基于ViewModelStore类。...这是通过将ViewModel与UI控制器分离,将其保存在ViewModelStore中实现数据共享: 多个UI控制器可以共享同一个ViewModel,这为不同组件之间数据共享提供了便利。...创建过程,可以传递参数ViewModel构造函数

23110

解决android viewmodel 数据刷新异常问题

/*更改绑定数据*/ model.addContacts(list); 以上是错误简写代码,让百撕不得姐啊!...刚开始使用 dagger2 + DataBinding 结构,很多东西也不是很清晰。 现象 一个页面有三块布局,使用一个Activity搭配三个Fragment实现。...通过三个Fragment共同使用ActivityViewModel来实现数据共享。 但是最后出现个现象就是只有刚进入页面时,ViewModel数据会显示在视图上。...通过点击事件更新ViewModel中 ObservableField 对象中数据,并不会刷新视图。 ?...@NewPesticideSingle (名字任意) 标注在 Module 和对应 Component 中即可 以上这篇解决android viewmodel 数据刷新异常问题就是小编分享给大家全部内容了

1.4K21
  • ViewModel 中让数据验证出错(Validation.HasError)控件获得焦点

    上面的 gif 是在另一篇文章 《自定义一个“传统” Validation.ErrorTemplate》 中一个示例,在这个示例中修改了 Validation.ErrorTemplate,这样在数据验证出错后...可是这个过程稍微不够流畅,希望点击 Sign In 按钮后,数据验证错误控件自动获得焦点,像下面这个 gif 那样: ?...这个需求在使用 CodeBehind 场景很容易实现,但 MVVM 模式就有点难,因为 ViewModel 应该不能直接调用 View 上任何元素函数。...函数时更改这个属性值以控制 UI 焦点。...自动获得焦点 上面的做法实现了需求,而且使用这种方案可以让 ViewModel 对 View 有更多控制权,可以指定哪个 UI 元素在任何时间获得焦点,但坏处就是要写很多代码,而且属性越多耦合越多

    1.5K40

    构造函数调用子类方法,写过

    GetValue(),根据C++多态特性,应该是要调用DeriveGetValue()返回2,真的是这样?...让我们看下最终输出。 ? 从输出结果看,Base构造函数与虚构函数均调用BaseGetValue()返回1,而不是DeriveGetValue()。...为什么Base构造函数与虚构函数即使调用虚函数,也是调自己函数呢?这跟构造函数与虚构函数调用顺序有关。子类对象构造时候,先调父类构造函数初始化父类,再调子类构造函数初始化子类。...子类对象虚构时候,恰恰相反,先调子类对象虚构函数,再调父类虚构函数。输出结果也证明了这点。 所以如果父类构造函数与虚构函数是调用子类函数,那就非常危险了。...因为父类构造函数执行时,子类构造函数还没有执行,说明子类还没有初始化,而这时就调用子类方法,很容易出错,甚至崩溃。

    1.4K20

    与下属面谈,是应该

    了解这些情形后,吴波找了郭华,可郭华觉得效率应该是最需要追求目标。所以他希望用最节省时间方式,达到工作要求。 工作效率重要,但良好沟通绝对会让工作进展更加良性循环。...作为管理者,是否应该更多和下属面对面交流呢?...,也更能达到目的,了解事情情况,也便于情感维护,便于加强团队凝聚力;缺点:沟通时间成本高,需要有沟通艺术,沟通点不全,无法事后查阅; 分析: 1.看性格 2.看场合 3.看性别 4.看优先级...5.看距离 6.看沟通渠道数 7.看信息复杂度 8.看情商 总结: 根据沟通目的,综合个人情况以及事件复杂度,挑选不一样沟通方式,没有所谓哪一种沟通方式比较多;但其实有时比较现实就是职场无同事...,还要多多提高你专业能力,通过专家能力来影响同事,会降低沟通门槛。

    34510

    再谈协程之viewmodel-livedata难兄难弟

    作用,它是连接ViewModel和Activity桥梁,负责了数据传递,所以,ViewModel和LiveData,完整了一个Activity数据传递和数据生命周期管理,将异步数据请求流程,...但这样创建ViewModel有个小问题,我们可以看下它源码,在ViewModelProvider中,它默认NewInstanceFactory是使用反射来创建VIewModel无参构造函数,如下所示...,通过getConstructor和newInstance函数反射调用带参数构造函数,返回ViewModel实例。...直接可以拿到DataModel实例啊,所以,自定义Factory之后,就不需要进行反射来获取实例了。 不过这样还是要写Factory,有点麻烦,所以我们进一步通过拓展函数优化下。...而且该协程构造器返回是一个不可变LiveData,可以直接暴露给对应UI层使用,在作用域中,可以通过emit()函数来更新LiveData数据。 这样整体流程就通了,而且,非常简单不是

    1.1K40

    应该提交 vendor 目录中依赖包

    vendor 目录(或者你安装依赖其它目录)都应该被添加进 .gitignore/svn:ignore/等等。最好这么做,然后让所有开发人员使用 Composer 来安装依赖包。...同样,对构建服务器,CI,部署工具等,应在编译构建时候对项目进行修改修改,使运行 Composer 成为其项目引导一部分。...在你自己 VCS(代码管理工具) 中将产生与你依赖资源包重复历史记录。通过 git 一个 git 仓库安装添加依赖,将把它们视作子模块。...这是有问题,因为它们并不是真正子模块,你项目在运行时候可能会出现问题。...通过上面的文字内容,我们知道在使用 Composer 项目的时候,我们不要把 vendor 中内容也提交到代码管理库中,而应该使用 Composer 自己在运行时候下载。

    10510

    flutter全局数据共享通知方案

    Redux 理解成本比较高,个人觉得耦合性也比较高,要搞清楚redux原理,先要了解一下几个概念 Store 这里是他构造函数,我们先不要管里面的一堆参数,看一眼就好。...StoreProvider 这里是他构造函数,这里参数比较简单,可以直接就了解一下 const StoreProvider({ Key key, @required Store...转换为了ViewModel,转了之后,实际上就是可以更好数据交给builder去构建view,是?...难道不是?我们前面提到了store可以接受到一个改变里面数据action,那么这些action是谁给处理呢?...回过头来看Store构造函数,里面的第一个参数是reducer,reducer英文翻译为减速器,还原剂,反正就是听着挺别扭,他不就是一个状态转换器嘛,数据有一个状态,经过action处理,变成另外一个状态

    6.1K191

    ViewModel 和 ViewModelProvider.Factory:ViewModel 创建者

    ViewModelProviders 在内部为我们管理并调用 ViewModel 构造函数,创建viewmodel实例并将该实例并返回。...这是由于你在实例化 ViewModel 对象时,不能直接在活动或者碎片中调用 ViewModel 构造方法,而且你又想去设置 ViewModel 构造方法参数,因此你需要将参数传入 ViewModelProvider.Factory...我们心中有这样一些疑问,我们不能直接在活动或碎片中将值传入 ViewModel 构造方法中去,需要写法来设置我们参数值使其正常工作,这就是为什么我们需要 ViewModelProver.Factory...什么时候不应该使用 ViewModelProvider.Factory 如果你 ViewModel 没有依赖项,这时你就不需要去自己创建 ViewModelProvider.Factory。...将你数值传入 ViewModelProvider.Factory 实例中去 你关注是最大动力!

    1.7K20

    浏览器自动填充功能真的安全看未必!

    在下图中,你可以看到自动填充功能一个例子: 映射自动填充存储内容 根据不同版本操作系统,浏览器会将自动填充数据存储在不同位置。接下来,我们一起映射出这些位置所存储数据。...DPAPICryptUnprotectData函数 重要参数解释: pDataIn[in] 指向DATA_BLOB结构体指针,该结构体存储了加密数据。...pPromptStruct[in, optional] 指向CRYPTPROTECT_PROMPTSTRUCT结构体指针,包含提示窗口所显示时间、位置和内容,该参数应该设置为NULL.。...: 大家剋看到,这里存储信用卡号为“4916 4182 7187 7549”,当我们请求查看信用卡数据或浏览器需要使用自动填充功能填写表单域时,DPAPI函数将会被调用(解密数据)。...下图中,Chrome API调用了DPAPI函数- CryptUnProtectData(),参数pDataOut->pbdata指向是返回解密数据(信用卡号-“4916 4182 7187 7549

    2K60

    Hilt 介绍 | MAD Skills

    以 iosched 项目 (Google I/O 开源应用) 中一个 ViewModel 为例,您能想象创建一个 FeedViewModel 所需依赖项及传递依赖项需要多大代码量?...Hilt 模块 我们既然已经了解了 Hilt 基础,那一起来提高示例复杂性吧。现在,MusicPlayer 构造函数中,需要一个依赖项 MusicDatabase。...当类型是一个接口,或者您无法在构造函数上添加 @Inject,例如类来自于您无法修改库。 假设我们在应用中 使用 Room 作为持久性存储库。...您还记得我们在文章开头看到 iosched 中 FeedViewModel 代码?您想看看使用 Hilt 支持之后效果?...实例,我们不仅要在构造函数上添加 @Inject 注解,还需要对这个类添加 @HiltViewModel 注解。

    1K10

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 是 onSaveInstanceState 替代品? 简而言之,不是,但是他们不无关联,请继续读。 如何高效地使用 ViewModel 来保存和恢复 UI 状态?...onSaveInstanceState() 是生命周期一个回调函数,而 ViewModel 从根本上改变了 UI 数据在你应用中管理方式。...如果新添加音乐需要在 UI 上显示,你还应该更新 ViewModel数据来反应音乐添加。谨记切勿在主线程中向数据库插入数据。...当用户搜索音乐时候 — 任何从数据库为 UI 控制器加载复杂音乐数据应该马上存入 ViewModel。你也应该将搜索查询本身存入 ViewModel。...不过,在这两种场景中,你仍需要一个 ViewModel 来避免因配置更改而重新从数据库中加载数据导致资源浪费。 ViewModel 是 Loader 一个替代品

    3.8K30

    winform能做出漂亮界面_winform界面美化第三方控件

    大家好,是架构君,一个会写代码吟诗架构师。今天说一说winform能做出漂亮界面_winform界面美化第三方控件,希望能够帮助大家进步!!!... CheckBox.CheckState 属性,SetBinding 方法中 Lambda 表达式是转换属性值转换器。...此方法接受以下参数: 控件名称; 应该绑定控件属性; 一个字符串数组,填充了可绑定 ViewModel 属性名称,这些属性应该组合在一起; 一个格式字符串(对于不可编辑控件)或一对转换器(如果允许用户编辑绑定控件...使用格式字符串模块将属性绑定到禁用(不可编辑)编辑器,在使用转换器模块中,您可以更改 TextEdit 值并将更新后字符串传递回 ViewModel 属性。...DevExpress WinForms能完美构建流畅、美观且易于使用应用程序,无论是Office风格界面,还是分析处理大批量业务数据,它都能轻松胜任!

    3.2K20

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 是 onSaveInstanceState 替代品? 简而言之,不是,但是他们不无关联,请继续读。 如何高效地使用 ViewModel 来保存和恢复 UI 状态?...onSaveInstanceState() 是生命周期一个回调函数,而 ViewModel 从根本上改变了 UI 数据在你应用中管理方式。...如果新添加音乐需要在 UI 上显示,你还应该更新 ViewModel数据来反应音乐添加。谨记切勿在主线程中向数据库插入数据。...当用户搜索音乐时候 — 任何从数据库为 UI 控制器加载复杂音乐数据应该马上存入 ViewModel。你也应该将搜索查询本身存入 ViewModel。...不过,在这两种场景中,你仍需要一个 ViewModel 来避免因配置更改而重新从数据库中加载数据导致资源浪费。 ViewModel 是 Loader 一个替代品

    98320

    Unity应用架构设计(1)—— MVVM 模式设计和实施(Part 2)

    MVVM回顾 经过上一篇文章介绍,相信你对MVVM设计思想有所了解。MVVM核心思想就是解耦,View与ViewModel应该感受不到彼此存在。...View只关心怎样渲染,而ViewModel只关心怎么处理逻辑,整个架构由数据进行驱动。不仅View与ViewModel彼此解耦,ViewModelViewModel之间也是解耦。...仔细观察一下,每个View都会出现 具体 ViewModel.属性.OnValueChanged事件+=或者-=具体处理函数 这样固定模板。...它是用来监听ViewModel属性值变化,用来替换沉长 oldVm.Property.OnValueChanged +=和-= NameValueChanged,理所应当应该放在View中,因为每个...再对BindingContext稍作改变,当它被赋值时,只初始化一次对OnValueChanged事件监听(原先是放在构造函数里)。

    2.2K90

    【译】LiveData三连

    尽管你可以将一个函数作为参数而不是UI组件本身传递,但在这里你也应该知道UI组件生命周期,因为该函数通常会操作该组件UI元素。...希望你能从这篇文章中获得一些关于LiveData知识,了解它在哪些情况下可以提供帮助,如何使用它,以及为什么它可能是一个比其他现有方法更好解决方案。有其他想法?有更好解决方案?...When to load data in ViewModels 最近,对一个表面上很简单问题进行了出乎意料长时间讨论。在我们代码中,我们究竟应该在哪里触发ViewModel数据加载。...ViewModel输出数据,Activities消费数据。 这一部分很清楚,不会引起太多讨论,但是ViewModel必须在某个时候加载、订阅或触发其数据加载。问题是,这应该在什么时候进行。...❌ Bad: Start in ViewModel constructor 我们可以通过在ViewModel构造函数中触发加载,轻松确保数据只被加载一次。这种方法在文档中也有显示。

    1.7K20
    领券