我们平时在写代码时为了不重复写代码,会进行复制代码或者写通用方法。今天我们就来把上传做的函数提取成为通用的方法调用。把上次写的函数提取为两个主要的文件:

    <font style="color:rgb(51, 51, 51);">ObserableObject</font><font style="color:rgb(51, 51, 51);">RelayCommand</font>。步骤如下:

    新建MVVM项目,将实例三中的文件复制到MVVM项目中即可。新建<font style="color:rgb(51, 51, 51);">ObserableObject</font>类文件,代码如下:
    1. using Prism.Mvvm;
    2. using System;
    3. using System.Collections.Generic;
    4. using System.ComponentModel;
    5. using System.Diagnostics;
    6. using System.Linq;
    7. using System.Linq.Expressions;
    8. using System.Text;
    9. using System.Threading.Tasks;
    10. namespace MVVMSum
    11. {
    12. [Serializable]
    13. public abstract class ObserableObject : INotifyPropertyChanged
    14. {
    15. [field:NonSerialized]
    16. public event PropertyChangedEventHandler PropertyChanged;
    17. protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    18. {
    19. var handler = this.PropertyChanged;
    20. if (handler != null)
    21. {
    22. handler(this, e);
    23. }
    24. }
    25. protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
    26. {
    27. var propertyName = PropertySupport.ExtractPropertyName(propertyExpression);
    28. this.RaisePropertyChanged(propertyName);
    29. }
    30. protected void RaisePropertyChanged(string propertyName)
    31. {
    32. VerifyPropertyName(propertyName);
    33. OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    34. }
    35. [Conditional("DEBUG")]
    36. [DebuggerStepThrough]
    37. public void VerifyPropertyName(string propertyName)
    38. {
    39. if (TypeDescriptor.GetProperties(this)[propertyName] == null)
    40. {
    41. Debug.Fail("无效属性名:" + propertyName);
    42. }
    43. }
    44. }
    45. }
    1. 未完结,需要看一下源码。这里记一个知识点:MVVM一个很好的框架——Prism