/// <summary> /// 속성 설정 /// </summary> /// <typeparam name="TProperty">속성 형식</typeparam> /// <param name="obj">속성을 포함한 객체</param> /// <param name="target">속성 저장 멤버</param> /// <param name="value">설정 값</param> /// <param name="propertyChangingEvent">PropertyChanging 이벤트</param> /// <param name="propertyName">속성 명</param> /// <returns>값 변경 여부</returns> public static bool Set <TProperty>(this INotifyPropertyChanging obj, ref TProperty target, TProperty value, PropertyChangingEventHandler propertyChangingEvent, [CallerMemberName] string propertyName = null) { if (!EqualityComparer <TProperty> .Default.Equals(target, value)) { var eventArgs = new QueryPropertyChangingEventArgs <TProperty>(propertyName, value); propertyChangingEvent?.Invoke(obj, eventArgs); if (!eventArgs.IsCanceled) { target = value; return(true); } } return(false); }
/// <summary> /// PropertyChanging 이벤트를 발생시킴. /// </summary> /// <param name="e"></param> /// <returns></returns> protected virtual bool OnPropertyChanging(QueryPropertyChangingEventArgs e) { PropertyChanging?.Invoke(eventSource, e); return(!e.IsCanceled); }