MVVM的使用

写一个小的Demo简单讲解一下使用的方法

用前准备,首先我们需要在我们的项目的Gradle文件当中去开始绑定数据的

//开启数据绑定
dataBinding {
    enabled=true
}

所用依赖

compile 'com.github.bumptech.glide:glide:3.7.0'
implementation "io.reactivex.rxjava2:rxjava:2.1.0" // 必要rxjava2依赖
implementation "io.reactivex.rxjava2:rxandroid:2.0.1" // 必要rxandrroid依赖,切线程时需要用到
implementation 'com.squareup.retrofit2:retrofit:2.5.0' //retrofit 的依赖
implementation 'com.squareup.retrofit2:converter-gson:2.5.0' //解析字符串的依赖
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // 必要依赖,和Rxjava结合必须用到,下面会提到

第一步我们需要去定义个网络接口的类

Demo所需的数据链接
在这里插入图片描述

第二步定义一个传递数据的接口

在这里插入图片描述
定义方法调用上面的接口
在这里插入图片描述

第三步创建数据的Model类,负责绑定视图和发送

在这里插入图片描述

第四步,创建我们的数据Bean类

在这里插入图片描述
bind url 这个非常的重要,我们后面在XML布局文件当中会用到
设置一个提供给ImagerView控件设置图片的方法 @BindingAdapter(“bind:url”) 代表了我们在布局里面引用的名字

第五步 创建布局

所有的布局必须用 layout 标签包裹住
对属性的描述
设置属性的名称和类型
在这里插入图片描述
调用属性,和上面的属性名称保持一致,里面的值,只能是我们上面规定的类型。
在这里插入图片描述
设置一个Recyclerview 负责展示数据

第六步 创建我们的item 子布局

在这里插入图片描述
在这里插入图片描述
因为我们Item 里面都是展示的Bean类里面的数据,所以我们直接把类型设置为我们的Bean类
在这里插入图片描述
通过我们定义的属性名称,去调用Bean类里面的属性给下面的 text 赋值
在这里插入图片描述
不一定非要叫URL,名称可以随意 阿猫阿狗也行

第七步 写我们的网络获取数据的代码

在这里插入图片描述
我们通过实现我们定义 IModel 方法,去实现它里面的getData方法,并把数据发送出去

第八步 创建Foodview的model类,并实现上面的IYMDXViewModel类

在这里插入图片描述

第九步 获取数据并传给适配器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第十步通过适配器去设置数据

在这里插入图片描述
Viewholder 直接写入我们的 dataBinding
在这里插入图片描述

### 什么是MVVM架构模式 MVVM(Model-View-ViewModel)是一种用于分离用户界面逻辑和业务逻辑的软件架构模式。它将应用程序分为三个主要部分:模型(Model)、视图(View)和视图模型(ViewModel)。这种分离有助于提高代码的可维护性、可测试性和复用性[^1]。 ### WPF中实现MVVM的基本步骤 #### 1. 创建项目结构 在WPF项目中,通常会创建以下文件夹来组织代码: - **Model**:存放数据模型类。 - **ViewModel**:存放与UI交互的逻辑类。 - **View**:存放XAML文件及其代码隐藏文件。 #### 2. 定义Model 模型表示应用程序的数据层。例如,定义一个简单的数据类 `DataModel`: ```csharp namespace WPF0416.Model { public class DataModel { public int Value { get; set; } } } ``` #### 3. 创建ViewModel 视图模型负责处理视图的逻辑并与模型进行交互。使用 `GalaSoft.MvvmLight` 库中的 `ViewModelBase` 类可以轻松实现属性更改通知机制。 示例代码如下: ```csharp using GalaSoft.MvvmLight; using WPF0416.Model; namespace WPF0416.ViewModel { public class MonitorViewModel : ViewModelBase { private DataModel _dataModel; public MonitorViewModel() { _dataModel = new DataModel(); } private int _data; public int Data { get { return _data; } set { _data = value; RaisePropertyChanged(() => Data); } } public void UpdateData(int newValue) { Data = newValue; } } } ``` #### 4. 设计View 视图是用户界面的部分,通常通过绑定到视图模型的属性来显示数据。以下是一个简单的 XAML 文件示例: ```xml <Window x:Class="WPF0416.View.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Text="Enter a number:" Margin="0,0,0,10"/> <TextBox x:Name="InputTextBox" Width="200" Height="30" Margin="0,0,0,10"/> <Button Content="Update" Command="{Binding UpdateCommand}" Margin="0,0,0,10"/> <TextBlock Text="{Binding Data}" FontSize="18"/> </StackPanel> </Grid> </Window> ``` #### 5. 绑定ViewModel到View 在 `App.xaml.cs` 或 `MainWindow.xaml.cs` 中设置视图模型为视图的数据上下文。例如: ```csharp using System.Windows; using WPF0416.ViewModel; namespace WPF0416.View { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MonitorViewModel(); } } } ``` #### 6. 实现命令绑定 为了响应用户操作(如按钮点击),可以在视图模型中定义命令。以下是使用 `RelayCommand` 的示例: ```csharp using GalaSoft.MvvmLight.Command; public class MonitorViewModel : ViewModelBase { // 其他代码... public RelayCommand<int> UpdateCommand { get; private set; } public MonitorViewModel() { _dataModel = new DataModel(); UpdateCommand = new RelayCommand<int>(UpdateData); } private void UpdateData(int newValue) { Data = newValue; } } ``` 在 XAML 中绑定命令时,可以通过传递参数来调用方法: ```xml <Button Content="Update" Command="{Binding UpdateCommand}" CommandParameter="{Binding ElementName=InputTextBox, Path=Text}"/> ``` ### 总结 上述示例展示了如何在WPF中实现MVVM架构模式。通过分离模型、视图和视图模型,可以显著提高代码的可维护性和可测试性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值