MVVM

MVVM框架 在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。 与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过数据绑定来更新UI;在响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理,耦合度将降低。 一、MVVM框架简介 1. 什 阅读详情

MVVM是Model-View-ViewModel的简写。,MVVM就是MVC的扩展,把数据处理全放到ViewModel里进行处理


一个模块文件中,分别有ViewController,View,Model,ViewModel四个文件  其中控制器VC在ViewController里,重写的view放到View文件夹里,数据模型放到Model里

数据请求等一系列操作放到ViewModel里



首先在ViewModel里写一个MovieModel类


#import <Foundation/Foundation.h>

#import "MovieModel.h"

#import <UIKit/UIKit.h>


typedef void (^ReturnValueBlock) (id returnValue);

typedef void (^ErrorCodeBlock) (id errorCode);


@interface MovieViewModel : NSObject


@property (nonatomic,copy)ReturnValueBlock returnBlock;

@property (nonatomic,copy)ErrorCodeBlock errorBlock;


//获取电影数据

- (void)getMovieData;


//跳转到电影详情页

- (void)movieDetailWithPublicModel: (MovieModel *)movieModel WithViewController: (UIViewController *)superController;

@end



#import "MovieViewModel.h"

#import "NetworkService.h"

#import "MovieModel.h"

#import "MovieViewController.h"


@implementation MovieViewModel


- (void)getMovieData{

    [NetworkServicerequestWithURL:@"/v2/movie/coming_soon"params:nilsuccess:^(id result) {

        NSLog(@"%@",result);

        

        NSArray *subjects = result[@"subjects"];

        NSMutableArray *modelArr = [NSMutableArrayarrayWithCapacity:subjects.count];

        for (NSDictionary *subjectin subjects) {

            MovieModel *model = [[MovieModelalloc]init];

            model.movieName = subject[@"title"];

            model.year = subject[@"year"];

            NSString *urlStr = subject[@"images"][@"medium"];

            model.imageUrl = [NSURLURLWithString:urlStr];

            model.detailUrl = subject[@"alt"];

            [modelArr addObject:model];

        }

        _returnBlock(modelArr);

        

    } failure:^(NSError *error) {

         NSLog(@"%@",error);

        _errorBlock(error);

    }];

}




然后在VC调用的时候(可以写成类方法)

  MovieViewModel *viewModel = [[MovieViewModelalloc]init];

    viewModel.returnBlock = ^(id returnValue){

        

        tableView.dataSource = returnValue;

        [tableView reloadData];

    };

    viewModel.errorBlock = ^(id errorCode){

      

        NSLog(@"%@",errorCode);

    };

    

    [viewModel getMovieData];

    

也可以重写tableView,把一系列的tableView的代理方法写到本身里


一下是我自己写的一个collectionView 在VIewModel请求数据,在VC回调block,可以在block里直接把数据赋值,直接给collectionView.dataSource,然后reload

//

//  MeiziCollectionView.m

//  meizi

//

//  Created by 俊洋洋 on 16/7/8.

//  Copyright © 2016年俊洋洋. All rights reserved.

//


#import "MeiziCollectionView.h"

#import "meiziCollectionViewCell.h"

@interface MeiziCollectionView()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>


@end



@implementation MeiziCollectionView


- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout

{

    self = [superinitWithFrame:frame collectionViewLayout:layout];

    self.backgroundColor =[UIColorwhiteColor];

    self.dataSource =self;

    self.delegate =self;

    [selfregisterClass:[meiziCollectionViewCellclass] forCellWithReuseIdentifier:@"cellID"];

    return self;

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

{

    returnself.dataSourcea.count;

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

{

    meiziCollectionViewCell *cell = [meiziCollectionViewCellcellWithCollectionView:collectionViewAtIndexPath:indexPath];

    [cell setupUI];

    cell.backgroundColor = [UIColorcyanColor];

    cell.model = self.dataSourcea[indexPath.row];

    return cell;

}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

{

    returnCGSizeMake(SCREENWIDTH/2.0f-10,SCREENWIDTH/2.0f-10);

}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

    returnUIEdgeInsetsMake(15,5, 0,5);

//    UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)

}

/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

}

*/


@end




关于Android MvvM的一些体会 关于Android MvvM的一些体会 前言 由于我司项目较老有很多历史包袱代码结构也比较混乱,需求复杂的页面动辄activity中1000多行,看着很是头疼,于是趁着加班提前做完需求余下的时间学习了mvvm对项目部分功能进行了改造,目前已经使用3个版本了,本篇博文分享下我使用的感受。 准备 这里先说说关于mvvm的几个问题(如有不对请轻喷 (╹▽╹)) 首先说说我为啥选择mvvm而不... 阅读详情

相关推荐

打造属于自己的MVVM框架: 1.什么是MVVM

MVVM(Model View ViewModel)是一种基于MVC的设计,开发人员在HTML上写一些Bindings,利用一些指令绑定,就能在Model和ViewModel保持不变的情况下,很方便的将UI设计与业务逻辑分离,从而大大的减少繁琐的DOM操作。 起源MVVM这个概念最是在2005年,由微软的工程师John Grossman在其博客中提出,最初这个概念是用在微软的WPF上的。直到最近几年

追 2万+

浅谈MVVM ——Model-View-View-Model

浅谈MVVM ——Model-View-View-Model

sakura的博客 1635

MVPvsMVVM, 在"Hello, World" 项目中,模型视图演示器 vs 模型视图视图视图!.zip

MVPvsMVVM, 在"Hello, World" 项目中,模型视图演示器 vs 模型视图视图视图! Model-View-Presenter vs Model-View-ViewModel发现Model-View-Presenter和Model-View-ViewModel模式在"你好,世界"项目中应用这两种模式的差异。 提供了演示者

MVVM的使用

MVVM 把传统的布局替换为dataBinding布局: 在外层布局按住Ctrl+回车会提示是否转化成dataBinding布局,直接转化: 替换setContentView:经过上述步骤,系统会自动生成ActivityMainBinding类,类名是布局文件名+Binding,布局文件首字母大写 ...

helloworld19870427的专栏 6861

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 354

全志平台Sensor驱动移植实战:从点亮到调优的完整指南

本文详细介绍了在全志平台上进行Sensor驱动移植的全过程,从硬件引脚配置到软件参数调优,涵盖点亮、出图和调优三大阶段。重点解析了OV02B10传感器的I2C通信建立、上电时序调试和初始化参数配置等关键技术点,并提供了实用的调试技巧与问题排查指南,帮助开发者高效完成全志平台Sensor驱动移植工作。

weixin_28727975的博客 218

浅谈MVVM框架

一、MVC简介  MVC是Model-View-Controler的简称               Model——即模型。模型一般都有很好的可复用性,统一管理一些我们需要使用的数据。       View——就是存放视图使用的。       Controller——控制器它负责处理View和Model的事件。 MVVM简介      MVC框架一目了然,也非常好理解

天方夜歌的博客 3万+

AI驱动的研发流程:定义高度专业和系统化的规划基准

在人工智能(AI)浪潮席卷全球的今天,软件研发的范式正经历着一场深刻而迅速的变革。AI技术的渗透,从最初的辅助工具角色,正逐步演变为驱动整个研发流程的核心引擎。传统的研发流程和项目管理方法论,在面对AI带来的高效率、高智能以及高复杂性挑战时,显得力不从心。企业对快速交付高质量软件产品、有效控制风险、并保证全流程可追溯性的需求日益迫切。

形上得其象,形下合于数;阴阳自济,玄理自明。 2181

02.Vue版helloworld体会MVVM

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;title&gt;&lt;/title&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=d

人间清醒 250

详解舵机的基本原理以及控制方法

文章目录什么是舵机?伺服控制硬件连接舵机规格SG90MG90SMG996R总结 什么是舵机? 舵机是伺服电机的一种,伺服电机就是带有反馈环节的电机,我们可以通过伺服电机进行精确的位置控制或者输出较高的扭矩; 舵机也叫也叫 RC 伺服器,通常用于机器人项目,也可以在遥控汽车,飞机等航模中找到它们。 类似舵机这样的伺服系统通常由小型电动机,电位计,嵌入式控制系统和变速箱组成。 电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较; 根据相应的偏差,控制

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

79、昇腾系列服务器/昇腾系列推理卡/昇腾系列嵌入式开发板+Dify+one api部署DeepSeek-R1-Distill-Qwen-32BW8A8+RAG本地模型知识库和负载均衡双实例

阶段,安装过程缺什么,,在docker外面git下源码,进入容器内部进行量化,这里的容器建议在创建个8卡的容器,双卡容器量化会显示npu显存不够,除非你用cpu转模型,我就懒得创建容器了,使用cpu量化吧,巨慢;创建容器,进入容器,计划使用两张昇腾NPU卡推理DeepSeek-R1-Distill-Qwen-32B的W8A8模型,所以构建的容器用两张卡,选6、7卡吧,0-6号卡可以跑文本嵌入模型、重排序模型;直接进入量化阶段,在容器外面操作即可,环境不用管,因为系统已经默认配置了环境,直接跳到。

sxj731533730 6120

什么是MVVM

1、什么是MVVM MVVM,是Model-View-ViewModel的简写,是M-V-VM三部分组成。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,其中ViewModel将视图 UI 和业务逻辑分开,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。 MVVM采用双向数据绑定,view中数据变化将自动反映到viewmodel上,反之,model中数据变化也将会自动展示在页面上。把Model和View关联起来的就是ViewM.

春风化雨 8万+

开发simulink 以及stm32半物理仿真碰到的问题,以及处理方法,Error:External Mode Open Protocol Connect command failed(实测有用)

串口实现的,但是在测试的时候发现,这个串口可以正常发送和接收数据,但是一旦把这个串口只让其进行版物理仿真就报错。直接刷写程序是可以的,最后查到问题了。我要实现半物理仿真,就是通过matlab实现可以直接控制stm32板子,实际上是通过xcp on。然后点击simulink上的观测按钮就可以直接和stm32平台进行通讯了。3,还是使用串口3,但是重新需要设置一下com口,因为重新插拔了一下,按照这个设置方法就可以。2,重新加载ioc文件。

pvmsmfchcs的博客 1500

CommunityToolkit.Mvvm 加速 MVVM 开发

CommunityToolkit.Mvvm 加速 MVVM 开发

视觉软件 3963

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WPF MVVM框架

MVVM即Model-View-ViewModel,MVVM模式与MVP(Model-View-Presenter)模式相似,主要目的是分离视图(View)和模型(Model),具有低耦合、可重用性、独立开发、可测试性等优点。

hccee的博客 3432

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

什么是MVVM模式?

文章目录前端的三大MV*模式:MVVM模式:ViewModel的作用:MVVM的组成部分:前端流行框架: 前端的三大MV*模式: MVVM模式: MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当下流行的MVVM框架有:Vue.js、AngularJS。 MVVM即模型-视图-视图模型。模型指的是后端传递的数据;视图指的是所看到的页面。视图模型是mvvm模式的核心,它是连接vie

zag666的博客 3万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WPF中MVVM工具包 CommunityToolkit.Mvvm

也称为MVVM工具包,是Microsoft Community Toolkit的一部分。它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。

去追随使你安宁的东西,去做你觉得有用的事情 4157

什么是MVVM,MVC和MVVM的区别,MVVM框架VUE实现原理

什么是MVVM,MVC和MVVM的区别,MVVM框架VUE实现原理 Mvvm定义 MVVM是Model-View-ViewModel的简写。即模型-视图-视图模型。 【模型】指的是后端传递的数据。 【视图】指的是所看到的页面。 【视图模型】mvvm模式的核心,它是连接view和model的桥梁。 它有两个方向: 一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是...

low666的博客 2576

Prism.Mvvm——MVVM详解

在MVVM(Model-View-ViewModel)架构模式中,View(视图层)与ViewModel(视图模型层)之间的数据交互是通过数据绑定实现的,其核心机制是依赖属性的属性监听系统。通常,视图层的数据被视为Target(目标),而视图模型层的数据则被视为Source(绑定源)。一旦绑定关系建立,绑定引擎会从绑定源获取数据并显示在目标上。如果绑定是双向的,目标的改变也会反馈到绑定源上。从Target到Source的更改通知是通过依赖属性内置的通知机制实现的。

一个幽灵,一个无知的幽灵在广阔的知识领域游荡 1152

WPF —— MVVM架构

MVVM是一种软件架构模式,它将应用程序分为三个层次 model(数据模型),view(视图),viewmodel(视图模型)model:表示应用程序当中数据和业务逻辑,通俗来说就是对象。例如学生的姓名和年龄等放到一个class里面,作为一个对象view:就是xaml文件,处理用户交互和展示数据的 交互就是事件click,展示就是数据绑定等viewmodel:数据和页面之间的桥梁,可以处理一些ui逻辑,也可以处理数据绑定,可以执行ui界面的命令(类似于事件)也可以处理ui界面事件。

一个新人博客,愿多多支持。 7492

MVVM架构

MVVM是Model-View-ViewModel的简写。它本质上就是MVC的改进版。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面 (UI) 清晰分离。 保持应用程序逻辑和UI之间的清晰分离有助于解决许多开发问题,并使应用程序更易于测试、维护和演变。 它还可以显著提高代码重用机会,并允许开发人员和UI设计人员在开发应用各自的部分时更轻松地进行协作。

qq_3517289697的博客 2078

MVVM 模式

1.MVVM模式分为Model,View,ViewModel 三个部分 (1).Model:数据层,包含数据实体和对数据实体的操作 (2).View:界面层,对应于Activity,XML,View,负责数据显示以及用户交互。 (3).ViewModel:关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方。 注意点 1.View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开 2.ViewModel只做和业务逻辑相关的工作,不涉

chuyouyinghe的专栏 8694

android mvvm官方demo,Android MVVM实战Demo完全解析

最新【重大更新说明】感谢各位读者的阅读,这篇文章由于年代久远,存在一些错误的观点,再次向大家道歉,也做一个技术上的解释说明。受限于当时的技术水平和网络论调,在那个时代,网上绝大多数人都认为加了databinding就是mvvm了,实际上不是这样的,MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。mvvm和MVP有一个比较大的区别是:vm...

weixin_26901145的博客 2732

Flutter Mvvm实践

Flutter Mvvm 实践

qq_21349039的博客 3031
上一篇: CAEmitterLayer,粒子发射系统
下一篇: 安装CocoaPods过程和遇到各种坑
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值