WPF入门到跪下 第九章 MVVM-基本数据处理

本文介绍了MVVM设计思想,包括Model(数据模型)、View(用户界面)和ViewModel(业务逻辑层)的关系,以及如何在三层间实现双向数据绑定,如使用INotifyPropertyChanged简化数据通知。实例展示了Model层的属性变化如何同步到View层。
摘要由CSDN通过智能技术生成

MVVM是Model-View-ViewModel的缩写。mvvm是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI展现出来,ViewModel是一个同步View和Model的对象。

在MVVM架构下,View和Model之间没有直接的联系,它们通过ViewModel进行交互,Model和ViewModel之间是交互是双向的,因此,View和Model的数据变化可以是同步的。
在这里插入图片描述

MVVM模式下的应用分层

Models:存放数据模型,可以是程序集或文件夹。

Views:存放WPF中的Window、Page、UserControl等一些界面可视化的文件,可以是程序集或文件夹。

ViewModels:业务逻辑层,可以是程序集或文件夹。
在这里插入图片描述

MVVM的基本数据处理

这里只是简单的做一下MVVM模式下各个层次双向绑定数据处理的实例。其他还包括依赖属性、数据校验、等等在前面的章节中有详细说明,就不再这里重述了。

Model层

如果数据模型层的模型中有很多需要进行数据变化通知处理的话,可以借用第三方库PropertyChanged.Fody来减少工作量。

public class MainModel:INotifyPropertyChanged
{
    private double value1 = 12;
    public double Value1 { 
        get { return value1; }
        set {
            value1 = value;
            Value3 = value1 + value2;
        }
    }
    private double value2 = 32;
    public double Value2
    {
        get { return value2; }
        set
        {
            value2 = value;
            Value3 = value1 + value2;
        }
    }
    private double value3;
    public event PropertyChangedEventHandler PropertyChanged;
    public double Value3 {
        get { return value3; }
        set {
            value3 = value;
            //通知xmal中绑定了此类型实例的Value3属性的对象,这个属性变化了,请重新取一下值
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value3"));
        } 
    }
}

ViewModel层

 public class MainViewModel
 {
     public MainModel mainModel { get; set; } = new MainModel();
 }

View层

<Window ......
        xmlns:vm="clr-namespace:WpfApp8.ViewModels"
        ......>
    <Window.DataContext>
        <vm:MainViewModel/>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBox Text="{Binding mainModel.Value1, UpdateSourceTrigger=PropertyChanged}"/>
            <Slider Value="{Binding mainModel.Value2}" Maximum="100" Minimum="0"/>
            <TextBlock Text="{Binding mainModel.Value3}"/>
        </StackPanel>
    </Grid>
</Window>
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SchuylerEX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值