如何在WPF中使用MVVM开发架构开发一个餐馆点餐系统(CrazyElephant)

本文介绍了如何在WPF中利用MVVM架构开发餐馆点餐系统。内容涉及UI分析、数据属性与命令属性的确定、MVVM架构的详细步骤,包括XML数据源、DataService接口、Model类、ViewModel的创建以及View与ViewModel的绑定。重点讨论了ViewModel在数据过滤和校验中的作用,以及DataGrid中菜品信息的ViewModel设计。
摘要由CSDN通过智能技术生成

MVVM的最大优势就是在界面的本质没有改变的情况下ViewModel代码是都不需要改动的。

1)确定UI中使用了多好命令属性和数据属性。

先来看看看法完的界面,进行一下分析:

    

通过UI窗体可以分析出来:

(1)餐馆的名字;餐馆的地址;订餐电话都是有可能更改的所以,这些属性需要Binding到一个ViewModel上去,并且需要一个餐馆的类来作为Model类。

(2)下面的DataGrid里都是菜品的信息,需要一个菜品的Model类。

(3)“共计“和”Order“是需要使用到命令属性Binding的。

数据属性有:餐馆信息;DataGrid里显示的菜品信息;”共计”里显示的数据。

命令属性有:“Order”操作;DataGrid中的“选中“操作。

这里用到了包含对命令属性俩种最典型的使用方法:一种是单独UI元素和命令属性的绑定;第二种是集合元素中每个元素与命令属性的关联关系。

 

2)MVVM的架构:

接着分析的话,面向对象的开发,数据要组织在对象里,而不是凌乱的乱放。所以这里的餐馆的名字,地址,电话都应该是来自同一个数据源对象。也就是这几个数据应该来源于一个餐馆的对象的属性。菜品信息应该来源于菜品对象。

3)开发源代码架构:

(1)Data文件家里的xml文件是作为项目的DB使用。先新建一个Data文件夹,然后把已经准备的XML文件copy进来,为了让这个data数据能够与程序发布,需要秀爱该文件的属性为:

(2)有了Data后,我们需要一个Service来读取这个Data数据,由于这个是一个模拟数据,所以我们的DataService在后期实际中会发生变化,这个时候就需要使用接口把数据读取的定义和实现进行分开:先新建一个Services文件夹,在这个文件夹中新建一个接口IDataService用来定义读取数据的接口类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WPFMVVMDemo.Services
{
    public interface IDataService
    {
        //使用接口把定义和实现分离开 有利于后期更改数据源
        //接口定以后,可以用其他的类来实现接口内的方法,来指定实现接口的方法名称。
        List<Dish> GetAllDishes();
    }
}


 

(3)那这个时候就可以发现我们的Service和Model是紧密相关的(这里的Dish类),所以就需要新建一个Model文件夹,在该文件夹里新建一个Dish类,而且这个Dish菜品信息类是对应着我们的Data.xml数据的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WPFMVVMDemo.Models
{
    作为ViewModel的基础类来存在
    public class Dish
    {
        public string Name { set; get; }
        public string Category { set; get; }
        public string Comment { set; get; }
        public double Score { set; get; }
    }
}


(4)有了这个Model后,我们就可以继续写Service了,需要实现读取xml文件的类来实现IDataService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WPFMVVMDemo.Models;
using System.Xml.Linq;

namespace WPFMVVMDemo.Services
{
    //继承IDataService后来实现GetAllDishes方法来获取数据信息
    public class XmlDataService:IDataService
    {
        public List<Dish> GetAllDishes()
        {
            List<Dish> dishList = new List<Dish>();
            string xmlFileName = System.IO.Path.Combine(Environment.CurrentDirectory, @"Data\Data.xml");
            XDocument xDoc = XDocument.Load(xmlFileNa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值