123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #region Apache License Version 2.0
- /*----------------------------------------------------------------
- Copyright 2019 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd.
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software distributed under the
- License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- either express or implied. See the License for the specific language governing permissions
- and limitations under the License.
- Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md
- ----------------------------------------------------------------*/
- #endregion Apache License Version 2.0
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using System.Text;
- using Senparc.Weixin.Annotations;
- namespace Senparc.Weixin.Entities
- {
- /// <summary>
- /// 用于实现INotifyPropertyChanged
- /// </summary>
- [Serializable]
- public abstract class BindableBase : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- [NotifyPropertyChangedInvocator]
- #if NET35 || NET40
- protected virtual void OnPropertyChanged(string propertyName)
- #else
- protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
- #endif
- {
- var eventHandler = this.PropertyChanged;
- if (eventHandler != null)
- {
- eventHandler(this, new PropertyChangedEventArgs(propertyName));
- }
- //PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));//需要VS2015+或新编译器支持
- }
- /// <summary>
- /// 设置属性
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="storage"></param>
- /// <param name="value"></param>
- /// <param name="propertyName"></param>
- /// <returns></returns>
- /// #if NET35 || NET40
- #if NET35 || NET40
- protected bool SetProperty<T>(ref T storage, T value, String propertyName)
- #else
- protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
- #endif
- {
- if (object.Equals(storage, value)) return false;
- storage = value;
- this.OnPropertyChanged(propertyName);
- return true;
- }
- }
- }
|