/// <summary> /// Returns the ValidationModelField associated with object. If a non-null view model object is passed /// across then it is always used, otherwise the <see cref="ViewModelObject"/> value is used. /// </summary> /// <param name="viewModelObject"></param> /// <returns></returns> public ValidationModelField GetField(ViewModelObject viewModelObject) { ValidationModelField result; var obj = viewModelObject ?? SingleInstanceViewModelObject; try { result = obj.Property.GetValue(obj.Instance, null) as ValidationModelField; if (result == null) { result = new ValidationModelField(); obj.Property.SetValue(obj.Instance, result, null); } } catch (Exception ex) { throw new InvalidOperationException(String.Format("Could not set property for validation field {0} on {1} (viewModelObject={2}, {3} singleton instance(s) seen, {4} collection instances seen)", Field, obj == null ? "null" : obj.Property.Name, viewModelObject, SingleInstanceViewModelObject == null ? 0 : 1, CollectionViewModelObjects.Count ), ex); } return(result); }
/// <summary> /// Sets or adds the appropriate ViewModelObject property. /// </summary> public void AddViewModelObject(object instance, PropertyInfo property, bool seenOnCollection) { var viewModelObject = new ViewModelObject(instance, property); if (seenOnCollection) { CollectionViewModelObjects.Add(viewModelObject); } else { if (SingleInstanceViewModelObject != null) { throw new InvalidOperationException($"Seen a single instance of {Field} on at least two non-collection objects: {SingleInstanceViewModelObject.Instance.GetType().Name} and {instance.GetType().Name}"); } SingleInstanceViewModelObject = viewModelObject; } }
public ObjectTranslation() { InitializeComponent(); BindingContext = new ViewModelObject(); }