using Avalar.Models.Interfaces; using Avalar.ViewModels.Image; using Avalar.Views; using ReactiveUI; using System; using System.Linq; namespace Avalar.Viewmodels.Image { public class ImageViewModel : ReactiveObject { public ImageViewModel(IImageModel imageModel, IServiceProvider serviceProvider) { ViewService = serviceProvider?.GetService(typeof(IAvalarViewService)) as IAvalarViewService; ImageModel = imageModel; ChildViewModel = new ImageNotLoadedViewModel(ReactiveCommand.Create(OpenFile)); } private IAvalarViewService ViewService { get; } private IImageModel ImageModel { get; } private object m_ChildViewModel; public object ChildViewModel { get => m_ChildViewModel; set => this.RaiseAndSetIfChanged(ref m_ChildViewModel, value); } public async void OpenFile() { var result = await ViewService.ShowOpenImageFileDialog().ConfigureAwait(true); if (result.Length != 1) return; ChildViewModel = new ImageLoadedViewModel(ImageModel.LoadImage(result.First()), ImageModel); } } }