public static void Create(ModelBase model, BindingCollection relations) { var modelProps = model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in modelProps) { if (!relations.ContainsKey(prop.Name)) { continue; } ModelPropertyChanged setValue = (string name) => { var binding = relations[name]; var value = modelProps.First(x => x.Name == name).GetValue(model); if (binding.Converter != null) { value = binding.Converter(value); } binding._type.GetProperty(binding.Property, BindingFlags.Public | BindingFlags.Instance).SetValue(binding.Obj, value); }; setValue(prop.Name); model.PropertyChanged += setValue; } }
/// <summary> /// Déclenche l'événement <see cref="ModelPropertyChanged"/> si une propriété de <see cref="Model"/> change /// </summary> protected virtual void OnModelPropertyChanged(object sender, PropertyChangedEventArgs e) { var property = sender.GetType().GetProperty(e.PropertyName); if (property?.GetCustomAttributes(typeof(IgnoreChangeAttribute), true).Length == 0) { OnChanged(); ModelPropertyChanged?.Invoke(sender, e); } }
/// <summary> /// Raises the ModelPropertyChanged event /// </summary> /// <param name="propertyName"></param> protected virtual void OnModelPropertyChanged(string propertyName) { ModelPropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
protected void NotifyDataChanged([CallerMemberName] string propertyName = "") { ModelPropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
private void OnModelPropertyChanged(object sender, PropertyChangedEventArgs e) { ModelPropertyChanged?.Invoke(this, e); }
protected void RaiseModelPropertyChanged(DependencyProperty p, object newValue) { ModelPropertyChanged?.Invoke(p, newValue); }