private async void Init() { var addins = await LoadAddins(); AllAddins = new ReactiveList <AddinVM>(addins.Select(s => new AddinVM(s))); Addins = AllAddins.CreateDerivedCollection(s => s, filter); if (!fileData.Data.LastAddin.IsNullOrEmpty()) { Addin = AllAddins.FirstOrDefault(a => a.Addin.AddinFile.EqualsIgnoreCase(fileData.Data.LastAddin)); if (Addin != null && !fileData.Data.LastCommand.IsNullOrEmpty()) { Command = Addin.Addin.Commands.FirstOrDefault( c => c.Command.GlobalName == fileData.Data.LastCommand); } } var canStart = this.WhenAnyValue(v => v.Command).Select(s => s != null); Start = CreateCommand(() => { HideMe(); var addin = Addin; var com = Command; fileData.Data.AddinFiles.Remove(addin.Addin.AddinFile); fileData.Data.AddinFiles.Insert(0, addin.Addin.AddinFile); fileData.Data.LastAddin = addin.Addin.AddinFile; fileData.Data.LastCommand = Command.Method.Name; OnClosing(); AllAddins.Remove(addin); AllAddins.Insert(0, addin); Addin = addin; Command = com; AddinManagerService.Invoke(com); }, canStart); RemoveAddin = CreateCommand <AddinVM>(a => { AllAddins.Remove(a); fileData.Data.AddinFiles.Remove(a.Addin.AddinFile); }); AddAddin = CreateCommand(AddAddinExec); if (!errors.IsNullOrEmpty()) { ShowMessage(errors, "Ошибка загрузки файлов сборок"); } this.WhenAnyValue(v => v.Search).Skip(1).Throttle(TimeSpan.FromMilliseconds(300)) .ObserveOn(dispatcher) .Subscribe(s => Addins.Reset()); }