I ran into a serious problem in the context menu, which I cannot solve for hours.
To reproduce the problem, I created a completely new Panorama application with application templates for Windows Phone 8 in Visual Studio 2012. I installed the Windows Phone toolkit via the nugget and added a context menu to the data template of the first long list that is associated with the items
<StackPanel Margin="0,-6,0,12"> <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/> <toolkit:ContextMenuService.ContextMenu> <toolkit:ContextMenu> <toolkit:MenuItem Header="{Binding LineOne}" Click="MenuItem_Click_1" Tag="{Binding}"> </toolkit:MenuItem> </toolkit:ContextMenu> </toolkit:ContextMenuService.ContextMenu> </StackPanel>
I set the title to the LineOne property for easier debugging. I attached the following event:
private void MenuItem_Click_1(object sender, RoutedEventArgs e) { var itemViewModel = (ItemViewModel)((MenuItem)sender).Tag; App.ViewModel.Items.Remove(itemViewModel); App.ViewModel.Items.Add(new ItemViewModel { LineOne = "Test", LineTwo = "Test", LineThree = "Test" }); }
I launched the application and used the context menu to delete the first item. The first item disappears, and a new item named Test appears at the bottom of the list, as expected. If I hold this new item, the menu item is bound to "runtime one" (the item that was deleted).
It was the simplest code that I could reproduce, but in my real application I have almost the same problem with more meaningful code to add and remove in different methods and even on different pages. I had a command, but since the data binding is incorrect, the command runs in the wrong view model with the wrong parameter.
Any idea why this is happening?
Stilgar
source share