public static IDisposable RunApp([NotNull] ViewPanel root, [NotNull] WidgetBuilder <Widget> builder, string debugName = null) { if (root == null) { throw new ArgumentNullException(nameof(root)); } if (builder == null) { throw new ArgumentNullException(nameof(builder)); } IView view = root; var context = new BuildContext(null, null); var stateHolder = State.Create <Widget, IState>(context, builder); var render = Atom.Reaction(() => root.Render(stateHolder.Value), debugName: debugName); // ReSharper disable once ImplicitlyCapturedClosure return(new ActionDisposable(() => { render.Deactivate(); if (!Engine.IsApplicationQuiting) { view.ResetSource(); } })); }
protected override void Render() { var filter = State.ActiveFilter; allVisibleButton.interactable = filter != VisibilityFilter.All; activeVisibleButton.interactable = filter != VisibilityFilter.Active; completedVisibleButton.interactable = filter != VisibilityFilter.Completed; todosContainer.Render(State.Todos); }