MVVMLight

来源:互联网 发布:太原软件 编辑:程序博客网 时间:2024/05/02 02:53

MVVMLight随便讲讲

推荐链接及博客:

  • http://www.cnblogs.com/manupstairs/p/4890300.html
  • http://blog.csdn.net/andrew_wx/article/details/37757147
  • http://www.cnblogs.com/yuefei/p/3799430.html

注意点

View实体类(即MVVM里面的Model层)继承ObservableObject。
而ObservableObject已经继承了INotityPropertyChanged属性变更通知接口。
注意下面代码的set方法和RaisePropertyChanged方法。

    public class Person : ObservableObject    {        private string _Name;        public string Name        {            get            {                return _Name;            }            set            {                Set(ref _Name, value);            }        }        private int _Age;        public int Age        {            get            {                return _Age;            }            set            {                _Age = value;                RaisePropertyChanged("Age");            }        } otityPropertyChanged       }

每个ViewModel类都将继承MVVMLight的 ViewModelBase 为父类
1、MVVM里面的VM(即ViewModel)继承了ViewModelBase,而ViewModelBase其实也继承了INotityPropertyChanged,但是它是先继承ObservableObject,而ObservableObject继承了INotityPropertyChanged。
2、当RaisePropertyChanged的属性名称参数为空,而通过编译器可以智能加上,可以通过反编译工具知晓,这点改进这点很人性化。

    public class PersonViewModel : ViewModelBase    {        public PersonViewModel()        {            Persons = SetItems();            AddPersonCommand = new RelayCommand(AddPerson);            EditPersonCommand = new RelayCommand(EditPerson);        }        private ObservableCollection<Person> _Persons;        public ObservableCollection<Person> Persons        {            get            {                return _Persons;            }            set            {                _Persons = value;                //这边加与不加RaisePropertyChanged()我认为是没有区别的。                //RaisePropertyChanged();            }        }        public ICommand AddPersonCommand { get; set; }        public ICommand EditPersonCommand { get; set; }        private ObservableCollection<Person> SetItems()        {            var items = new ObservableCollection<Person>();            foreach (var item in Enumerable.Range(0, 10))            {                Person p = new Person()                {                    Name = "Name" + item,                    Age = item                };                items.Add(p);            }            return items;        }        private void AddPerson()        {            Persons.Add(new Person { Name = "织田信长", Age = 28 });        }        private void EditPerson()        {            Persons.First().Name = "丰城秀吉";            Persons[Persons.Count - 2].Name = "德川家康";            Persons[Persons.Count - 1].Age = 70;        }    }
0 0
原创粉丝点击