public GlobalDaysOfWeek() { _currentDateFormat = DateTimeTools.GetCurrentDateFormat(); _dayOfWeekSelections = new List<DayOfWeekSelection>(); var shortestDayNamesInOrder = _currentDateFormat.ShortestDayNamesInOrder(); int i = 0; foreach (var shortestDayName in shortestDayNamesInOrder) { var selection = new DayOfWeekSelection(_currentDateFormat.DayOfWeek(i++), shortestDayName) { IsSelected = false }; _dayOfWeekSelections.Add(selection); } InitializeComponent(); foreach (var dayOfWeekSelection in _dayOfWeekSelections) { var dayOfWeekButton = new Button() { DataContext = dayOfWeekSelection, FontSize = 14}; dayOfWeekButton.SetBinding(ContentControl.ContentProperty, new Binding("ShortestDayName")); dayOfWeekButton.SetBinding(Control.ForegroundProperty, new Binding("IsSelected") { Converter = new SelectedStatusColorConverter(), ConverterParameter = Foreground }); dayOfWeekButton.Click += ((s, e) => { var dows = (DayOfWeekSelection) ((Button) s).DataContext; if (AllowEdit) { dows.IsSelected = !dows.IsSelected; var selectedDaysOfWeekList = SelectedDaysOfWeek.ToList(); if (dows.IsSelected) selectedDaysOfWeekList.Add(dows.DayOfWeek); else selectedDaysOfWeekList.Remove(dows.DayOfWeek); SelectedDaysOfWeek = selectedDaysOfWeekList.ToArray(); //Update binding BindingExpression be = this.GetBindingExpression(SelectedDaysOfWeekProperty); be.UpdateSource(); } }); this.GlobalDaysOfWeekLayoutRoot.Children.Add(dayOfWeekButton); } }