当前位置: 首页 > news >正文

申请网站建设经费十大放黄不登录不收费

申请网站建设经费,十大放黄不登录不收费,b2c电商网站开发,怎么创作一个微信小程序本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailburn框架了,感觉时间 挺紧的,这篇就实现其中的更新操作吧。 功能很明确,当我们更改DataGrid中的…

本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailburn框架了,感觉时间

挺紧的,这篇就实现其中的更新操作吧。

               

  功能很明确,当我们更改DataGrid中的CheckBox时,将源中当前发生变化的数据项在界面上显示出来。我们仍然在前面项目的基础上实现这个功能

首先我们需要给实体Person类添加一个Bool的属性,因为这里我们只对这个属性值操作,所以对于age,name属性也就无必要实现更改通知了

        public class Person:INotifyPropertyChanged

      {

        public int age { get; set; }

        public string name { get; set; }

        private bool _isBoy;

        public bool IsBoy

        {

            get { return _isBoy; }

            set { _isBoy = value;

            if (PropertyChanged != null)

            {

                PropertyChanged(this, new PropertyChangedEventArgs("IsBoy"));

            }

            }

        }

        public event PropertyChangedEventHandler PropertyChanged;

      }

我们仍然从Persons中获取数据集合,这里我们因为操作时源集合将发生变化,所以这里我们继承了ObservableCollection<T>类

         public class Persons:ObservableCollection<Person>

        {

        public Persons() : base()

        {        

        }

        public new event PropertyChangedEventHandler PropertyChanged;

        public new void Add(Person person)

        {

            //添加项时自动绑定,并且向上传递发生改变的属性

            ((INotifyPropertyChanged)person).PropertyChanged += (obj, e) =>

            {

                if (PropertyChanged != null)

                {

                    PropertyChanged(obj, new PropertyChangedEventArgs(e.PropertyName));

                }

            };

            base.Add(person);

        }           

        }

     这里的Persons类通过new关键字隐藏了ObservableCollection<Person>原来的事件和方法,在Persons类中这里我们还需要

添加一个获取源数据的集合

       public Persons GetPerson()

        {

            //获取数据源集合

            Persons getAllpersons = new Persons();

            for (int i = 1; i < 4; i++)

            {

                getAllpersons.Add(new Person() {age=i,name="Student"+i,IsBoy=true});

            }

            return getAllpersons;

        }

       现在对于Model我们已经完成了工作,下面就是修改ViewModel了,这个部分其实没有太大的变化

        public Persons GetPersons { get; set; }

        public PageViewModel()

        {

            GetPersons = new Persons().GetPerson();

            //数据源发生变化时的操作

            GetPersons.PropertyChanged += (obj, e) =>

            {

                Person person = (Person)obj;

                MessageBox.Show(string.Format("CurrentDetailes:{0},{1},{2}",person.name,person.age,person.IsBoy));

            };

        }

      我们对于这个GetPersons这个源集合进行了一个操作,就是当它的属性发生变化时执行一个动作,这里我们只是用对话框将当前项显示出来

     对于UI,我们仍然只是用之前的Xaml

        <data:DataGrid ItemsSource="{Binding GetPersons}"  AutoGenerateColumns="True" Height="200" HorizontalAlignment="Left" Name="dataGrid1"  />

      最后我们将View和Model都放入MainPage页面中

        <UserControl.Resources>

        <vm:PageViewModel x:Key="model"></vm:PageViewModel>

        </UserControl.Resources>

        <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource model}">

        <viw:PageView></viw:PageView>

        </Grid>

      好了,这样我们的功能就实现了。不过在这里我们还是可以考虑一点东西的,真实情况是我们的实体类不会只是一个,那么我们就要重复为每一个实体类实现ObservableCollection<T> 类了,这时可能你已经想到用泛型了,我们把集合用泛型实现.

对于Persons类,我们将其改为泛型集合

       public class ViewModelCollection<T> : ObservableCollection<T>

       {

        public ViewModelCollection() : base()

        {

        }

        public new void Add(T item)

        {

            ((INotifyPropertyChanged)item).PropertyChanged += new PropertyChangedEventHandler(ViewModelCollection_PropertyChanged);

            base.Add(item);

        }

        public new event PropertyChangedEventHandler PropertyChanged;

        void ViewModelCollection_PropertyChanged(object sender, PropertyChangedEventArgs e)

        {

            if (PropertyChanged != null)

            {

                PropertyChanged(sender, new PropertyChangedEventArgs(e.PropertyName));

            }

        } }

ViewModel中:

        public ViewModelCollection<Person> GetPersons{get;set;}

        public PageViewModel()

        {       

            GetPersons = GetMan();

            //数据源发生变化时的操作

            GetPersons.PropertyChanged += (obj, e) =>

            {

                Person person = (Person)obj;

                MessageBox.Show(string.Format("CurrentDetailes:{0},{1},{2}", person.name, person.age, person.IsBoy));

            };

        }

         public static ViewModelCollection<Person> GetMan()

        {

            //获取数据源集合

            ViewModelCollection<Person> getAllpersons = new ViewModelCollection<Person>();

            for (int i = 1; i < 4; i++)

            {

                getAllpersons.Add(new Person() { age = i, name = "Student" + i, IsBoy = true });

            }

            return getAllpersons;

        }

      整体上的是一致的,只不过之前,因为实体类单一,所以我一直将数据源固定在Model模块中的,那么用泛型之后,我就将这个获取数据源的行为就移动到对应的ViewModel中了,这样实现更为优雅一些。

      其实通过这个循序渐进的过程,很容易让人感觉的到,从开始到现在除非我们需求的改变,很少修改UI,几乎大部分重构或者修改都是在ViewModel中实现,这个也的确让人体会到UI与逻辑分离带来的方便之处,同时经过MVVM的分离形式,我感觉对于程序的调试也比先前容易定位。

转载于:https://www.cnblogs.com/liuguanghai/p/3225988.html

http://www.lbrq.cn/news/2718667.html

相关文章:

  • 怎么开发一个微信商城seo优化排名
  • 评价高的企业网站开发网络营销课程学什么
  • 郑州做网站价格爱站网关键词挖掘工具熊猫
  • 建设网站熊掌号惠州自动seo
  • 山东淄博网站建设游戏推广公司怎么接游戏的
  • 建设网站管理规定东莞搜索seo网站关键词优化
  • 做交友网站的前景关键词排名推广公司
  • 安阳seo网站优化如何自己免费制作网站
  • 网站开发提现功能网址收录平台
  • 自助搜优惠券网站怎么做的网站测试的内容有哪些
  • 网络服务顺序seo关键词排名优化怎么样
  • 微商城 网站制作舆情分析报告案例
  • b2c建设网站公司东莞网络优化调查公司
  • 上蔡县做彩票网站开源cms建站系统
  • 创建网站的六个步骤网络游戏推广怎么做
  • 旅游网页设计说明200字百度seo排名培训 优化
  • 中文设计网站站长之家网站查询
  • 什么网站教你做美食360推广联盟
  • 没有网站如何做落地页网络广告案例以及分析
  • 城市建设规划网站app推广代理平台
  • 网站个人空间怎么做今日国内新闻10则
  • 网站内容seo广州seo优化外包公司
  • 暴雪公司现状seo快速排名百度首页
  • 让网站百度不到网络营销的渠道有哪些
  • SEO优化网站建设价格sem网站推广怎么做
  • 哪些网站可以做视频收费汕头网站建设方案优化
  • 新手做免费网站seo实战密码电子书
  • 北理工网站开发与应用答案百度一下首页登录入口
  • 温州网站建设案例seo搜索是什么意思
  • ks2e独服做网站手机优化软件哪个好用
  • Python爬取推特(X)的各种数据
  • 德州扑克游戏术语
  • 3D商品展示:技术狂欢下的普及困局
  • Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
  • Transformer之多头注意力机制和位置编码(二)
  • 从感知到执行:人形机器人低延迟视频传输与多模态同步方案解析