patterncsharpMinor
Go Back to Previous Item
Viewed 0 times
itembackprevious
Problem
I have a Back function, and it is growing. I also think this is terrible, but I don't seem to get how it can be improved:
`public void GoBack()
{
NavButtonUsed = true;
Forward.Insert(0, Back[0]);
Back.RemoveAt(0);
if (Back[0].Title.StartsWith(" ") && CurrentItem.Menu != Back[0].Menu)
{
switch (Back[0].Menu)
{
case Menus.WSOneNote:
CurrentItem = ItemList[0];
break;
case Menus.WSMainMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("MainMenu"), typeof(WindowsData.MainMenu), Menus.WSMainMenu))];
break;
case Menus.WSTextMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextMenu"), typeof(WindowsData.TextMenu), Menus.WSTextMenu))];
break;
case Menus.WSTextBlockMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextBlockMenu"), typeof(WindowsData.TextBlockMenu), Menus.WSTextBlockMenu))];
break;
case Menus.WSTableMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableMenu"), typeof(WindowsData.TableMenu), Menus.WSTableMenu))];
break;
case Menus.WSTableCellsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableCellsMenu"), typeof(WindowsData.TableCellsMenu), Menus.WSTableCellsMenu))];
break;
case Menus.WSDrawMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("DrawMenu"), typeof(WindowsData.DrawMenu), Menus.WSDrawMenu))];
break;
case Menus.WSDrawnItemsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString(
`public void GoBack()
{
NavButtonUsed = true;
Forward.Insert(0, Back[0]);
Back.RemoveAt(0);
if (Back[0].Title.StartsWith(" ") && CurrentItem.Menu != Back[0].Menu)
{
switch (Back[0].Menu)
{
case Menus.WSOneNote:
CurrentItem = ItemList[0];
break;
case Menus.WSMainMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("MainMenu"), typeof(WindowsData.MainMenu), Menus.WSMainMenu))];
break;
case Menus.WSTextMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextMenu"), typeof(WindowsData.TextMenu), Menus.WSTextMenu))];
break;
case Menus.WSTextBlockMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextBlockMenu"), typeof(WindowsData.TextBlockMenu), Menus.WSTextBlockMenu))];
break;
case Menus.WSTableMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableMenu"), typeof(WindowsData.TableMenu), Menus.WSTableMenu))];
break;
case Menus.WSTableCellsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableCellsMenu"), typeof(WindowsData.TableCellsMenu), Menus.WSTableCellsMenu))];
break;
case Menus.WSDrawMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("DrawMenu"), typeof(WindowsData.DrawMenu), Menus.WSDrawMenu))];
break;
case Menus.WSDrawnItemsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString(
Solution
Your
The whole
Inside the
Then you are assigning
So, if this method works like intended, the
GoBack() method could be simplified in its current pattern to public void GoBack()
{
NavButtonUsed = true;
Forward.Insert(0, Back[0]);
Back.RemoveAt(0);
CurrentItem = ItemList[ItemList.IndexOf(Back[0])];
NavButtonUsed = false;
}The whole
switch..case is senseless, because the only thing it is doing is triggering the OnPropertyChanged() event twice. Inside the
switch..case you are assigning a MenuItem to the CurrentItem property (triggering an OnPropertyChanged() event) and you are breaking out of the switch. Then you are assigning
ItemList[ItemList.IndexOf(Back[0])] to the CurrentItem property (triggering an OnPropertyChanged() event), so you are just overwriting the property. So, if this method works like intended, the
switch..case can be removed.Code Snippets
public void GoBack()
{
NavButtonUsed = true;
Forward.Insert(0, Back[0]);
Back.RemoveAt(0);
CurrentItem = ItemList[ItemList.IndexOf(Back[0])];
NavButtonUsed = false;
}Context
StackExchange Code Review Q#78593, answer score: 6
Revisions (0)
No revisions yet.