public async Task BeforeEach() { await ConnectToSimulation(); Main = new MainVM(Engine); monitor = new PropertyMonitor(Main); }
/// <summary> /// Creates an listener for an view model and register it on the host. /// </summary> /// <typeparam name="T">Type of the view model.</typeparam> /// <typeparam name="TProperty">Type of the property to listen to.</typeparam> /// <param name="host">Host to register the listener to.</param> /// <param name="source">The view model to listen to.</param> /// <param name="propertyExpression">The Expression to the property. /// Must be a MemberExpression.</param> /// <returns>The property Listener.</returns> /// <exception cref="InvalidOperationException">If Expression is not an memberexpression.</exception> public static IPropertyListener Listen <T, TProperty>(this IListenerHost host, T source, Expression <Func <T, TProperty> > propertyExpression) where T : INotifyPropertyChanged { if (propertyExpression.Body.NodeType == ExpressionType.MemberAccess && propertyExpression.Body is MemberExpression me) { var propertyName = me.Member.Name; var listener = new PropertyMonitor <T, TProperty>(source, propertyName, propertyExpression.Compile()); host.AddListener(listener); return(listener); } throw new InvalidOperationException($"Expression must point to an Property of an view model of type {nameof(INotifyPropertyChanged)}."); }
public override void OnInspectorGUI() { t = (PropertyMonitor)target; t.target = EditorGUILayout.ObjectField("Target", t.target, typeof(GameObject), true) as GameObject; if (t.target != null) { if (t.component != null) { int i = getComponents().IndexOf(t.component); if (i >= 0) { componentIndex = i; } } componentIndex = EditorGUILayout.Popup("Component", componentIndex, getComponentNames().ToArray()); targetComponent = getComponents()[componentIndex]; List <string> properties = new List <string>(); PropertyMonitor.GetProperties(targetComponent).ToList().ForEach(p => properties.Add(p.Name)); if (properties.Count > 0) { if (t.fieldName != null) { int fi = properties.IndexOf(t.fieldName); if (fi >= 0) { propertyIndex = fi; } } propertyIndex = EditorGUILayout.Popup("Property", propertyIndex, properties.ToArray()); if (propertyIndex >= properties.Count) { propertyIndex = 0; } fieldName = properties[propertyIndex]; } } t.formatting = EditorGUILayout.TextField("Formatting", t.formatting); if (GUI.changed) { t.component = getComponents()[componentIndex]; t.fieldName = fieldName; EditorUtility.SetDirty(target); serializedObject.ApplyModifiedProperties(); } }