using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Input; using Aitex.UI.Charting.ViewModel; using System.Windows; using Aitex.UI.Charting.View; using DataAnalysisControl.Core; namespace Aitex.UI.Charting.Command { public class RemoveDataSourceCommand : ICommand { public RemoveDataSourceCommand(string sourceName) { _sourceName = sourceName; } string _sourceName; public bool CanExecute(object parameter) { return true; } #pragma warning disable 0067 public event EventHandler CanExecuteChanged; #pragma warning restore 0067 private void AsyncShowWarningMessageBox(string message, string title) { Application.Current.Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(message, title, MessageBoxButton.OK, MessageBoxImage.Warning))); } public void Execute(object parameter) { string reason = string.Empty; try { var commonViewModel = (CommonViewModel)parameter; if (string.IsNullOrEmpty(_sourceName)) { foreach (var ds in commonViewModel.DataSources) { ds.Value.Dispose();//释放每个datasource对象资源 } commonViewModel.DataSources.Clear(); commonViewModel.RenderableSeries.Clear(); //commonViewModel.ChartDataDic.Clear(); //commonViewModel.ChartDataSets.Clear(); } else { for (int i = 0; i < commonViewModel.RenderableSeries.Count; i++) { var line = commonViewModel.RenderableSeries[i] as MyLineSeries; if (line.DataSource.Title == _sourceName) { (new RemoveDataSeriesCommand(line.UniqueId)).Execute(commonViewModel); i = -1; //reset counter } } if (commonViewModel.DataSources.Keys.Contains(_sourceName)) { commonViewModel.DataSources[_sourceName].Dispose();//释放指定datasource对象的资源 commonViewModel.DataSources.Remove(_sourceName); } } commonViewModel.InvokePropertyChanged(); GC.Collect(); } catch (Exception ex) { reason = string.Format("删除数据源{0}出错", _sourceName); CONTEXT.WriteLog(ex, reason); AsyncShowWarningMessageBox(reason, "警告"); } } } }