public CompareHashViewModel( IImageHashSimilarityCalculator calculator, FileHashViewModel fileA, FileHashViewModel fileB) { if (calculator == null) { throw new ArgumentNullException(nameof(calculator)); } this.fileA = fileA ?? throw new ArgumentNullException(nameof(fileA)); this.fileB = fileB ?? throw new ArgumentNullException(nameof(fileB)); CalculateCommand = new CapturingExceptionAsyncCommand( async() => { Busy = true; try { var a1 = fileA.AverageHash; var a2 = fileB.AverageHash; AverageHash = await Task.Run(() => calculator.Calculate(a1, a2)); var d1 = fileA.DifferenceHash; var d2 = fileB.DifferenceHash; DifferenceHash = await Task.Run(() => calculator.Calculate(d1, d2)); var p1 = fileA.PerceptualHash; var p2 = fileB.PerceptualHash; PerceptualHash = await Task.Run(() => calculator.Calculate(p1, p2)); } finally { Busy = false; } }, () => fileA.Loaded && fileB.Loaded && !Busy); PropertyChanged += OnPropertyChanged; fileA.PropertyChanged += OnPropertyChanged; fileB.PropertyChanged += OnPropertyChanged; }
public DemoViewModel( IFileSystem fileSystem, IDemoImageHash imageHash, IImageHashSimilarityCalculator calculator) { if (fileSystem == null) { throw new ArgumentNullException(nameof(fileSystem)); } if (imageHash == null) { throw new ArgumentNullException(nameof(imageHash)); } if (calculator == null) { throw new ArgumentNullException(nameof(calculator)); } FileA = new FileHashViewModel(imageHash, fileSystem); FileB = new FileHashViewModel(imageHash, fileSystem); Compare = new CompareHashViewModel(calculator, FileA, FileB); }