void Selected_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "IsSelected") { _isAnySelected = AllOptions.Any(o => o.IsSelected) && AllCentres.Any(o => o.IsSelected); } }
public SelectDataRequiredOptionsViewModel(IRepository _repo, IEnumerable <DataRequiredOption> selectedDataRequired = null, IEnumerable <StudyCentreModel> centres = null) { var options = Enum.GetValues(typeof(DataRequiredOption)).Cast <DataRequiredOption>() .Where(d => d != DataRequiredOption.NotSet).ToList(); AllOptions = selectedDataRequired == null ?options.Select(dro => new DataRequiredOptionsViewModel(dro) { IsSelected = true }) .ToList() :options.Select(dro => new DataRequiredOptionsViewModel(dro) { IsSelected = selectedDataRequired.Contains(dro) }) .ToList(); AllCentres = centres == null ? _repo.LocalStudyCentres.Select(c => new StudyCentreOptionsViewModel(c) { IsSelected = true }).ToArray() : _repo.LocalStudyCentres.Select(c => new StudyCentreOptionsViewModel(c) { IsSelected = centres.Contains(c) }).ToArray(); _isAnySelected = true; foreach (var o in AllOptions) { o.PropertyChanged += Selected_PropertyChanged; } foreach (var c in AllCentres) { c.PropertyChanged += Selected_PropertyChanged; } WasCancelled = true; MultiCentreOption = AllCentres.Skip(1).Any(); SelectAll = new RelayCommand(p => { foreach (var o in AllOptions) { o.IsSelected = true; } foreach (var c in AllCentres) { c.IsSelected = true; } }); UnselectAll = new RelayCommand(p => { foreach (var o in AllOptions) { o.IsSelected = false; } foreach (var c in AllCentres) { c.IsSelected = false; } }); Close = new RelayCommand(p => RequestClose(this, new EventArgs())); Apply = new RelayCommand(p => { WasCancelled = false; Close.Execute(null); }, p => _isAnySelected); }