MVVM 原生原生MVVM的使用

Posted airforce094

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM 原生原生MVVM的使用相关的知识,希望对你有一定的参考价值。

一、前言

      前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的。

       平时习惯了Dev与MVVMLight,遇上原生的说实话还真不会,于是写下来当做备忘录。  (界面老司机可以直接不看了)

 

二、代码范例

      View的部分就直接略过了,看Model部分:

public class Model : INotifyPropertyChanged
{
public string Isbn { get; set; } public string Description { get; set; }
//需要改变的属性值 private string _AS; public string AS { get { return _AS; } set { _AS = value; NotifyPropertyChanged("AS"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } }

 

      ViewModel部分:

public class VM : INotifyPropertyChanged
{
        private string currentIsbn = string.Empty;
        public string CurrentIsbn
        {
            get
            {
                return currentIsbn;
            }
            set
            {
                currentIsbn = value;
                NotifyPropertyChanged("CurrentIsbn");
            }
        }
       
        public ObservableCollection<Model> Isbns { get; set; }


        private ICommand _confirmCmd;
        public ICommand ConfirmCmd
        {
            get { return _confirmCmd ?? (_confirmCmd = new ConfirmFunction(this)); }
            set
            {
                _confirmCmd = value;
            }
        }


        public VM()
        {
             Isbns = new ObservableCollection<Model>();
        }

                     
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
 }


 public class ConfirmFunction : ICommand
 {
        private VM vm;

        public ConfirmFunction(VM _vm)
        {
            this.vm = _vm;
        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
           // do your job
        }
  }

 

小结:

1. Model与ViewModel继承INotifyPropertyChanged

2. 与View有交互的绑定字段需要如下格式:

    private string _a;

    public string a
    {
            get
            {
                return _a;
            }
            set
            {
                _a = value;
                NotifyPropertyChanged("a");
            }
     }

3. 所有命令都为ICommand类型,然后再依照上面的格式通过Delegate完成

4. 写Command类的时候VS会提示你需要哪些方法的,哈哈哈

 

以上是关于MVVM 原生原生MVVM的使用的主要内容,如果未能解决你的问题,请参考以下文章

展示如何在 MVVM 应用程序中使用 Avalondock 的示例代码 [关闭]

MVVM框架---双向绑定及设计模式

WPF 原生绑定和命令功能使用指南

片段的视图模型

全面介绍Android的MVVM框架 - 数据绑定

Flutter Mvvm实践