/// <summary> /// Set a property value on an object and notify that it changed only if it changed /// </summary> /// <typeparam name="T">The type the field and the value are</typeparam> /// <param name="sender">The object that the field is being set on</param> /// <param name="field">The field that will be changing</param> /// <param name="value">The new value for the field</param> /// <param name="before">The action that should be performed before the value is set</param> /// <param name="after">The action that should be performed after the value is set</param> /// <param name="properties">The property names of the properties that have changed</param> public static void SetAndNotify <T>(this INotifyPropertyChanged sender, ref T field, T value, Action before, Action after, params string[] properties) { if (sender != null && sender.Set(ref field, value, before, after)) { sender.OnPropertyChanged(properties); } }
public static void SetModel <T>(this INotifyPropertyChanged viewModel, T model) { using (viewModel.Suspend()) { var token = viewModel.Get <SuspenderToken>("EntityNullToken"); if (token != null && model != null) { token.Dispose(); } if (viewModel.Set(model, "Model")) { if (model == null) { viewModel.Set <SuspenderToken>(viewModel.Suspend(), "EntityNullToken"); } } } }
public static void SetLinked <T>(this INotifyPropertyChanged viewModel, T view) { using (viewModel.Suspend()) { var token = viewModel.Get <SuspenderToken>("EntityNullToken"); if (token != null && viewModel != null) { token.Dispose(); } if (viewModel.Set(view, "Linked")) { //if (model == null) viewModel.Set<SuspenderToken>(viewModel.Suspend(), "EntityNullToken"); } } }