public MainWindow() { InitializeComponent(); DataContext = this; Total = Items .ObserveItem(item => item.IsChecked) .Merge() .Select(isChecked => isChecked ? 1 : 0) .Scan(0, (x, y) => x + y, (x, y) => x - y) .ToReactiveProperty(0); Items .ObserveElementObservableProperty(item => item.RemoveCommand) .Subscribe(pair => { Items.Remove(pair.Instance); }); AddCommand.StartWith(new object[] { null, null, null }).Subscribe(_ => { Items.Add(new Item()); }); }