/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}"/> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="settings">Settings that define the dependency graph, change listeners /// and monitoring behaviour.</param> /// <returns>The root dependency node, that links to the targeted item.</returns> public static DependencyNode <T> CreateDependency <T>(DependencyNodeSettings <T> settings) { DependencyNode <T> node = WalkExpressionTree <T>(settings.TargetExpression.Body, settings.ObserveSubValueChanges, null); if (settings.ChangeHandler != null) { node.DependencyChanged += settings.ChangeHandler; } return(node); }
/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}"/> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="target">The expression that declares the dependency chain from root /// to the target item or value.</param> /// <param name="changeHandler">An optional event listener that is being invoked if the /// target value changes either through direct change, or because the dependency graph /// was changed because of a changed intermediary node.</param> /// <returns>The root dependency node, that links to the targeted item.</returns> /// <exception cref="ArgumentNullException">If <paramref name="target"/> /// is a null reference.</exception> public static DependencyNode <T> CreateDependency <T>(Expression <Func <T> > target, EventHandler <DependencyChangeEventArgs <T> > changeHandler) { if (target == null) { throw new ArgumentNullException("target"); } //create settings component var settings = new DependencyNodeSettings <T>(target); if (changeHandler != null) { settings.ChangeHandler = changeHandler; } //delegate to overload return(CreateDependency(settings)); }
/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}"/> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="settings">Settings that define the dependency graph, change listeners /// and monitoring behaviour.</param> /// <returns>The root dependency node, that links to the targeted item.</returns> public static DependencyNode <T> Create <T>(DependencyNodeSettings <T> settings) { return(DependencyBuilder.CreateDependency(settings)); }