예제 #1
0
파일: DFBind.cs 프로젝트: Hengle/Tetris-1
        /*********** One-way binds ***********/

        public static ISubscription bind <A>(
            this RxList <A> list, int max, string maxName,
            Fn <int, IObservable <Option <A> >, ISubscription> bindObservable
            )
        {
            var subscription = list.rxSize.subscribe(size => {
                if (size > max)
                {
                    throw new Exception(String.Format(
                                            "Max {0} {1} are supported in view, " +
                                            "but list size was exceeded.", max, maxName
                                            ));
                }
            });
            var enumeration = Enumerable.Range(0, max).Select(i => {
                var observable = list.rxElement(i);
                return(bindObservable(i, observable));
            }).ToList(); /** Eagerly evaluate to bind **/

            return(new Subscription(() => {
                subscription.unsubscribe();
                foreach (var s in enumeration)
                {
                    s.unsubscribe();
                }
            }));
        }