public void Update(ProgramSet progSet) { var old_progSet = this.progSet; this.progSet = progSet; UpdatePrograms(progSet.Programs); var old_progs = old_progSet.Programs.Values; var progs = progSet.Programs.Values; if (!MiscFunc.IsEqual(old_progSet.config.Name, progSet.config.Name)) { this.RaisePropertyChanged(nameof(Text)); } if (!MiscFunc.IsEqual(old_progSet.config.Icon, progSet.config.Icon)) { cachedIcon = null; this.RaisePropertyChanged(nameof(Icon)); } if (!MiscFunc.IsEqual(old_progSet.config.Category, progSet.config.Category)) { this.RaisePropertyChanged(nameof(Category)); } if (!MiscFunc.IsEqual(old_progSet.config.NetAccess, progSet.config.NetAccess)) { this.RaisePropertyChanged(nameof(Access)); this.RaisePropertyChanged(nameof(AccessTag)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => t.RuleCount), progs.Sum(t => t.RuleCount))) { this.RaisePropertyChanged(nameof(Rules)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => t.AllowedCount), progs.Sum(t => t.AllowedCount))) { this.RaisePropertyChanged(nameof(Allowed)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => t.BlockedCount), progs.Sum(t => t.BlockedCount))) { this.RaisePropertyChanged(nameof(Blocked)); } if (!MiscFunc.IsEqual(old_progSet.GetLastActivity(), progSet.GetLastActivity())) { this.RaisePropertyChanged(nameof(LastActivity)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => t.SocketCount), progs.Sum(t => t.SocketCount))) { this.RaisePropertyChanged(nameof(Sockets)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => (long)t.UploadRate), progs.Sum(t => (long)t.UploadRate))) { this.RaisePropertyChanged(nameof(UpRate)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => (long)t.DownloadRate), progs.Sum(t => (long)t.DownloadRate))) { this.RaisePropertyChanged(nameof(DownRate)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => (long)t.TotalUpload), progs.Sum(t => (long)t.TotalUpload))) { this.RaisePropertyChanged(nameof(UpTotal)); } if (!MiscFunc.IsEqual(old_progs.Sum(t => (long)t.TotalDownload), progs.Sum(t => (long)t.TotalDownload))) { this.RaisePropertyChanged(nameof(DownTotal)); } }