/// <summary> /// Handle the filter button click. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnFilterButtonClick(object sender, RoutedEventArgs args) { MainWindowDataContext dataContext = (MainWindowDataContext)DataContext; dataContext.IsFilterActive = true; // Sort data and then search by name PropertyInfo filterProperty = (PropertyInfo)PropertySortComboBox.SelectedItem; MemberTab tab = (MemberTab)MemberTypeTabControl.SelectedItem; bool sortAscending = SortAscendingCheckbox.IsChecked != null && SortAscendingCheckbox.IsChecked.Value; // Local predicate function to facilitate order-by property object SortSelector(Member element) => filterProperty.GetValue(element, null); IEnumerable <Member> filterData = sortAscending ? tab.Data.OrderBy(SortSelector) : tab.Data.OrderByDescending(SortSelector); string nameQuery = SearchTextbox.Text.ToLower(); if (!string.IsNullOrEmpty(nameQuery)) { // Check if the first name, last name, first + last name, or last + first name contain the query string filterData = filterData.Where(element => element.FirstName.ToLower().Contains(nameQuery) || element.LastName.ToLower().Contains(nameQuery) || string.Join(" ", element.LastName, element.FirstName).ToLower().Contains(nameQuery) || string.Join(" ", element.FirstName, element.LastName).ToLower().Contains(nameQuery)); } DataGrid membersDataGrid = (DataGrid)MemberTypeTabControl.GetChildren().Find(control => control is DataGrid); membersDataGrid.ItemsSource = filterData; }
/// <summary> /// Handle the delete member button click event. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnDeleteMemberButton(object sender, RoutedEventArgs args) { Team team = (Team)TeamSelectionComboBox.SelectedItem; MemberTab memberTab = (MemberTab)MemberTypeTabControl.SelectedItem; // Find a child data-grid of the tab control DataGrid membersDataGrid = (DataGrid)MemberTypeTabControl.GetChildren().Find(control => control is DataGrid); // If we haven't selecting anything in the data grid, we can't remove anything if (membersDataGrid.SelectedItem == null) { return; } int currentSelectedIndex = membersDataGrid.SelectedIndex; team.RemoveMember(memberTab.MemberType, (Member)membersDataGrid.SelectedItem); if (currentSelectedIndex == membersDataGrid.Items.Count) { currentSelectedIndex -= 1; } membersDataGrid.SelectedIndex = currentSelectedIndex; }
/// <summary> /// Handle the clear filter button click. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnClearFilterButtonClick(object sender, RoutedEventArgs args) { MainWindowDataContext dataContext = (MainWindowDataContext)DataContext; dataContext.IsFilterActive = false; MemberTab tab = (MemberTab)MemberTypeTabControl.SelectedItem; DataGrid membersDataGrid = (DataGrid)MemberTypeTabControl.GetChildren().Find(control => control is DataGrid); membersDataGrid.ItemsSource = tab.Data; }
/// <summary> /// Handle the new member button click event. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnNewMemberButton(object sender, RoutedEventArgs args) { Team team = (Team)TeamSelectionComboBox.SelectedItem; MemberTab memberTab = (MemberTab)MemberTypeTabControl.SelectedItem; Member newMember = (Member)Activator.CreateInstance(memberTab.MemberType); team.AddMember(memberTab.MemberType, newMember); // Find a child data-grid of the tab control DataGrid membersDataGrid = (DataGrid)MemberTypeTabControl.GetChildren().Find(control => control is DataGrid); membersDataGrid.SelectedItem = newMember; membersDataGrid.ScrollIntoView(newMember); }
/// <summary> /// Handle the type selection changed. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnTypeSelectionChanged(object sender, SelectionChangedEventArgs args) { // Find a child data-grid of the tab control DataGrid membersDataGrid = (DataGrid)MemberTypeTabControl.GetChildren().Find(control => control is DataGrid); if (membersDataGrid.SelectedItem == null) { return; } Type newType = (Type)TypeSelectionComboBox.SelectedItem; Member member = (Member)membersDataGrid.SelectedItem; // No change in type means that we don't need to do anything if (newType == member.GetType()) { return; } Team team = (Team)TeamSelectionComboBox.SelectedItem; // Remove the member from the old type and move it to the new type collection in the team member map team.RemoveMember(member.GetType(), member); // Convert the member to its respective type via casting Member newMember = new Member(); if (newType == typeof(Wrestler)) { newMember = new Wrestler(); } else if (newType == typeof(Coach)) { newMember = new Coach(); } // Copy the values from the old member to the converted member newMember.FirstName = member.FirstName; newMember.LastName = member.LastName; newMember.Gender = member.Gender; newMember.School = member.School; newMember.YearsOfExperience = member.YearsOfExperience; team.AddMember(newType, newMember); }