MVVMLight

MVVMLight随便讲讲

推荐链接及博客:


注意点

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;
        }
    }

猜你喜欢

转载自blog.csdn.net/u010792238/article/details/53151013