public ColumnDiffViewModel(ProjectViewModel mainWindowViewModel) { this.MainWindowViewModel = mainWindowViewModel; this._detailedCompareResult = new DetailedCompareResult(); this._queryMetaData = new TableMetaData(); RunCommand = new RelayCommand(async() => { MainWindowViewModel.Lock(); DetailedCompareResult result = await GetDetailedDifferences(); Dispatcher.CurrentDispatcher.Invoke( new Action(() => { if (result != null) { DetailedCompareResult = result; } })); MainWindowViewModel.UnLock(); }); PeekColumnsCommand = new RelayCommand(async() => { MainWindowViewModel.Lock(); QueryMetaData.Columns.Clear(); var columns = await GetQueryColumnsAsync(); Dispatcher.CurrentDispatcher.Invoke( new Action(() => { QueryMetaData.TableName = "a"; foreach (var col in columns) { QueryMetaData.Columns.Add(col); } })); MainWindowViewModel.UnLock(); }); ViewComparisonReportCommand = new RelayCommand(() => { var stats = DetailedCompareResult.GetCalculatedStats(); var win = new StatsReportWindow(stats); win.ShowDialog(); }, ViewReportCanExecute); }
private async Task <DetailedCompareResult> GetDetailedDifferences() { var keyColumns = QueryMetaData.Columns .Where(c => c.IsKeyColumn) .Select(c => c.ColumnName); if (keyColumns.Count() == 0) { System.Windows.Forms.MessageBox.Show("At least one column need to be marked as key"); return(new DetailedCompareResult()); } var ignoredColumns = QueryMetaData.Columns .Where(c => c.IsIgnoredInComparisson) .Select(c => c.ColumnName); DetailedCompareResult result = null; var a = new Action(() => { try { var setComparer = QueryConfiguration.GetComparer(MainWindowViewModel.LogWriter); result = setComparer.GetDetailedDifferences( keyColumns, ignoredColumns ); } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.Message); } }); await Task.Run(a); return(result); }