WPF进阶之MVVM教程(六):终极版(附源码)
自写了WPF入门系列(点击学习)文章,收到很多大学生的私信,经常会问一些MVVM的问题,由于自己对MVVM也并不了解,遇到问题也是经常请朋友帮忙看看,趁着业余时间,经过一段时间得学习、开始写MVVM系列的文章,主要写一下自己对MVVM的理解,希望这不仅是对自己成长的记录,也能对同学们有所帮助。
来吧,让我们再次起航,WPF从入门到放弃,再到进阶之路!
欢迎大家在剑指工控技术群里继续讨论、共同学习!
来吧!一起学起来!
第6讲
MVVM教程(六)-终极版
基本工作已经完成了,接下来开始View的编写。
首先将Title的内容改成动态变化的,设置Title="{Binding Restaurant.Name, StringFormat=\{0\}-在线订餐}" 这里使用反斜杠字符来转义花括号。
以及设置窗口大小以及启动位置。
设置边框(Border) BorderBrush="Orange":设置边框的颜色为橙色、BorderThickness="3":设置边框的粗细为3个单位、CornerRadius="6":设置边框的圆角半径为6个单位、 Background="Yellow":设置边框的背景色为黄色。
首先建一个grid,建三行分别显示餐厅信息、菜单信息、下单按钮。
三行的高度分别为Auto、*、Auto,这样使得窗口在调整大小时能够保持餐厅信息显示在窗口的顶部,下单按钮显示在窗口的底部,而菜单则占据窗口的中间部分,并随着窗口的大小调整而自适应。
第一行显示内容:显示餐厅名称、地址和电话。使用多个StackPanel来组织元素。第一个StackPanel包含两个TextBlock元素,它们呈水平排列,使用DropShadowEffect来达到阴影效果。第二个和第三个StackPanel都包含两个TextBlock元素,它们分别表示餐厅地址和电话。
第二行显示内容:
AutoGenerateColumns="False"表示关闭自动生成列的功能,这里用到手动创建列GridLinesVisibility="None"表示不显示网格线
CanUserAddRows="False"表示不允许用户添加行
CanUserDeleteRows="False"分别表示不允许用户删除行
Margin="4"表示控件与周围元素的距离为4个像素
Grid.Row="1"表示放置在Grid控件的第二行
数据源绑定DishMenu,将会自动显示所有菜品信息。
DataGrid.Columns中定义了每列
DataGridTextColumn分别定义了菜品、种类、点评、推荐分数四列,分别绑定Dish.Name、Dish.Category、Dish.Comment、Dish.Score
DataGridTemplateColumn绑定了IsSelected的属性,用于表示该菜品是否被选中
SortMemberPath="IsSelected" 定义绑定到列的属性名,用户单击该列的列头时进行排序
CellTemplate定义了一个CheckBox控件
IsChecked属性绑定了IsSelected属性,控制是否选中
UpdateSourceTrigger=PropertyChanged表示在CheckBox被选中或取消选中时,立即更新数据源。
Command属性绑定了DataContext中的SelectMenuItemCommand,表示当CheckBox被选中时,执行SelectMenuItemCommand命令。通过RelativeSource属性,找到DataGrid控件,然后绑定SelectMenuItemCommand。这样就可以在CheckBox被选中时执行ViewModel中的SelectMenuItemCommand命令。
第三行显示内容:用于展示共计、订单总数、“下单”按钮。
TextBlock控件用于显示“共计”这个文字
TextBox控件用于显示订单总数,Text属性绑定到Count属性,用于显示订单总数
Button控件用于提交订单,Content="Order"表示按钮上的文字为“Order”,Command属性绑定到PlaceOrderCommand命令,用于处理提交订单的逻辑。
最终的成品效果如下:
最后可以自定义餐馆信息。
MVVM进阶教程暂时分享到这里。
源码下载链接:
https://share.weiyun.com/9nALRfyu
如果需要下载,入剑指工控技术群后,联系各群群管理员。
(需入群请联系如下美女管理员)
最后祝大家都能学有所成。
就这么简单!
作者简介:
曹言林:加入工控八余载,从事过单片机编程、控制柜接线、设备维修,PLC编程、上位机编程、MES实施。对各方面虽不是专家级别,也愿为工控圈添砖加瓦,贡献自己的一份力量。
WPF从入门到放弃-回顾
欢迎大家在剑指工控技术群里继续讨论、共同学习!来吧!一起学起来!