public MainWindowViewModel() { BrowseOldLevelData = ReactiveCommand.Create <Window, Task>(async window => { OldLevelData = await BrowsePath(window, OldLevelData); }); BrowseNewLevelData = ReactiveCommand.Create <Window, Task>(async window => { NewLevelData = await BrowsePath(window, NewLevelData); }); BrowsePlayerData = ReactiveCommand.Create <Window, Task>(async window => { PlayerData = await BrowsePath(window, PlayerData); }); BrowseOutputPath = ReactiveCommand.Create <Window, Task>(async window => { OutputPath = await BrowsePath(window, OutputPath); }); RunCommand = ReactiveCommand.Create <TextEditor, Unit>(Run, CanRunProcess.ObserveOn(RxApp.MainThreadScheduler)); CanRunProcess.OnNext(true); _reactiveLogger = new ReactiveLogger(); _reactiveLogger.OnLog .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(list => LogText.Insert(LogText.TextLength, string.Join(Environment.NewLine, list) + Environment.NewLine)); }