/// <summary> /// SetValue Delegate CallBack 및 OldValue Dispose /// </summary> /// <typeparam name="T"></typeparam> /// <param name="newValue"></param> /// <param name="disposeOldValue"></param> /// <param name="raiseChangedDelegate"></param> /// <param name="oldValue"></param> /// <param name="propertyName"></param> private void PostCallback <T>(T newValue, bool disposeOldValue, RaisePropertyChangedDelegate <T> raiseChangedDelegate, T oldValue, [CallerMemberName] string propertyName = "") { NotifyPropertyChanged(propertyName); if (raiseChangedDelegate != null) { raiseChangedDelegate(oldValue, newValue); } if (!disposeOldValue) { return; } IDisposable disposableOldValue = oldValue as IDisposable; if (disposableOldValue != null) { disposableOldValue.Dispose(); } }
/// <summary> /// 현재값과 들어온 값이 같은 경우에도 이벤트를 발생하게 한다. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="field"></param> /// <param name="newValue"></param> /// <param name="disposeOldValue"></param> /// <param name="raiseChangedDelegate"></param> /// <param name="isEquals">OldValue.Equals(NewValue) = true 일 경우에도 raiseProperty 이벤트를 발생 시킨다.</param> /// <param name="propertyName"></param> private void SetValue <T>(ref T field, T newValue, bool disposeOldValue, RaisePropertyChangedDelegate <T> raiseChangedDelegate, bool isEquals, [CallerMemberName] string propertyName = "") { if (!isEquals && Equals(field, newValue)) { return; } T oldValue = field; field = newValue; if (_syncContext == null) { PostCallback <T>(newValue, disposeOldValue, raiseChangedDelegate, oldValue, propertyName); } else { _syncContext.Send(delegate { PostCallback <T>(newValue, disposeOldValue, raiseChangedDelegate, oldValue, propertyName); }, null); } }
protected void SetValue <T>(string propertyName, ref T field, T newValue, bool disposeOldValue, RaisePropertyChangedDelegate <T> raiseChangedDelegate) { if (object.Equals(field, newValue)) { return; } T oldValue = field; field = newValue; RaisePropertyChanged(propertyName); if (raiseChangedDelegate != null) { raiseChangedDelegate(oldValue, newValue); } if (!disposeOldValue) { return; } IDisposable disposableOldValue = oldValue as IDisposable; if (disposableOldValue != null) { disposableOldValue.Dispose(); } }
protected void SetValue <T>(string propertyName, ref T field, T newValue, RaisePropertyChangedDelegate <T> raiseChangedDelegate) { SetValue <T>(propertyName, ref field, newValue, false, raiseChangedDelegate); }
/// <summary> /// 속성값 Binding 설정(PropertyChanged Delegate 전달) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="field"></param> /// <param name="newValue"></param> /// <param name="raiseChangedDelegate">PropertyChanged Delegate</param> /// <param name="propertyName"></param> protected void SetValue <T>(ref T field, T newValue, RaisePropertyChangedDelegate <T> raiseChangedDelegate, [CallerMemberName] string propertyName = "") { SetValue <T>(ref field, newValue, false, raiseChangedDelegate, propertyName); }
/// <summary> /// 속성값 Binding 설정(동일값 PropertyChanged 발생유무) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="field"></param> /// <param name="newValue"></param> /// <param name="disposeOldValue">oldValue Dispose 여부</param> /// <param name="isEquals">oldValue = newValue 동일한 값 PropertyChanged 이벤트 발생 여부</param> /// <param name="raiseChangedDelegate">PropertyChanged Delegate</param> /// <param name="propertyName"></param> protected void SetValue <T>(ref T field, T newValue, bool disposeOldValue, bool isEquals, RaisePropertyChangedDelegate <T> raiseChangedDelegate = null, [CallerMemberName] string propertyName = "") { SetValue <T>(ref field, newValue, disposeOldValue, raiseChangedDelegate, isEquals, propertyName); }