public MainViewModel() { _multiEngine = this.ObservableToProperty( Engines.Changed.Select(_ => Engines.Count > 1), vm => vm.MultiEngine); _singleEngine = this.ObservableToProperty( Engines.Changed.Select(_ => Engines.Count == 1), vm => vm.SingleEngine); _languages = this.ObservableToProperty( this.ObservableForProperty(vm => vm.SelectedEngine) .Select(_ => SelectedEngine.Value.Languages), vm => vm.Languages); _languages.Subscribe(_ => EnsureLanguage()); Engines.Changed.Subscribe(_ => EnsureEngine()); Observable.Merge( this.ObservableForProperty(vm => vm.DesignTimeMode).IgnoreValues(), this.ObservableForProperty(vm => vm.SelectedEngine).IgnoreValues(), this.ObservableForProperty(vm => vm.SelectedLanguage).IgnoreValues(), this.ObservableForProperty(vm => vm.RazorCode).IgnoreValues()) .ObserveOn(RxApp.DeferredScheduler) .Subscribe(_ => Regenerate()); this.PropertyChanged += MainViewModel_PropertyChanged; }