Ejemplo n.º 1
0
    public static ICell <T3> Merge <T, T2, T3>(this ICell <T> cell, ICell <T2> cell2, Func <T, T2, T3> func)
    {
        Func <T3> curr = () => func(cell.value, cell2.value);

        return(new AnonymousCell <T3>((Action <T3> reaction, Priority p) =>
        {
            var disp = new CellJoinDisposable <T3>();
            disp.lastValue = func(cell.value, cell2.value);
            disp.Add(cell.ListenUpdates(val =>
            {
                T3 newCurr = curr();
                if (!object.Equals(newCurr, disp.lastValue))
                {
                    disp.lastValue = newCurr;
                    reaction(newCurr);
                }
            }, p));
            disp.Add(cell2.ListenUpdates(val =>
            {
                T3 newCurr = curr();
                if (!object.Equals(newCurr, disp.lastValue))
                {
                    disp.lastValue = newCurr;
                    reaction(newCurr);
                }
            }, p));
            return disp;
        }, curr));
    }
Ejemplo n.º 2
0
    public static ICell <IEnumerable <T> > ToCellOfCollection <T>(this IEnumerable <ICell <T> > cells)
    {
        Func <IEnumerable <T> > values = () => cells.Select(cell => cell.value);

        return(new AnonymousCell <IEnumerable <T> >((Action <IEnumerable <T> > reaction, Priority p) =>
        {
            CellJoinDisposable <T> group = new CellJoinDisposable <T> {
            };
            foreach (var cell in cells)
            {
                group.Add(cell.ListenUpdates(_ => reaction(values()), p));
            }
            return group;
        }, values));
    }