MVVM知识总结

2 篇文章 0 订阅

用了一段时间的MVVM框架,那么接下来总结一下它的相关知识点。MVVM是Model-View-ViewModel的简称,它的流程跟MVP相似,但是MVP没有学习过,但引入了Data Binding技术,实现View和ViewModel数据的双向绑定,进一步降低View和ViewModel的耦合度,减轻Activity的压力。DataBinding的用法大家可以自行上网查阅学习,这次重点是放在MVVM这个模式上。
项目结构图
在这里插入图片描述

Model层还是和前面的一样

ViewModel
这里ViewModel因为要和View绑定数据,所以有mAccount、mPassword、mOnClickListener,这些变量都跟View层的组件绑定在一起。除了这些外,剩下的代码和MVP中的Presenter类似。

  public void Select_DiningTable(UserControl uc)
        {
            try
            {
                UserControl myuc =  (UserControl)uc;
                UC = myuc;
                DependencyObject parent = VisualTreeHelper.GetParent(myuc);
                //获取WrapPanel控件 集合      
                List<WrapPanel> myWP = FindVisualChildren.FindVisualChildrens<WrapPanel>(parent);
                WP = myWP[0];
                if (WP != null)
                {
                    WP.Children.Clear();
                }
                var diningTable = (from tbDiningTable in myModels.S_DiningTable
                                   orderby tbDiningTable.tableNumber //按照桌号排序
                                   select new
                                   {
                                       diningTableID = tbDiningTable.diningTableID,
                                       tableNumber = tbDiningTable.tableNumber,
                                       number = tbDiningTable.number,
                                       status = tbDiningTable.status,
                                       affiliation = tbDiningTable.affiliation
                                   }).ToList();
                dataTable = ListToDataTable.ListToDataTablen(diningTable);
                if (dataTable != null)
                {
                    for (int i = 0; i < dataTable.Rows.Count; i++)
                    {
                        //实例化桌子(把它添加到WrapPanel里面)
                        DiningTable_XS_UC diningTable_XS = new DiningTable_XS_UC();
                        WP.Children.Add(diningTable_XS);
                        int DiningTableID = Convert.ToInt32(dataTable.Rows[i]["DiningTableID"].ToString());
                        //传递数据
                        var diningTableViewModel = (diningTable_XS.DataContext as DiningTableXSViewModel);
                        diningTableViewModel.DiningTableID = DiningTableID;
                        diningTableViewModel.DiningTable += Item_DiningTable;
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }

        }

View层是用来放页面代码的,由于代码较多,就不展示代码了
讲一下它的优点跟缺点
优点:
1)引入Data Binding技术后,Activity减少了很多冗余的代码,如findViewById等,使得Activity的代码非常简洁。
2)双向绑定时,当Model变化时,View-Model会自动更新,View也会自动变化。
缺点
1) 数据绑定使得 Bug 很难被调试。
2)数据双向绑定不利于代码重用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值