2013-09-11 2 views
0

Я разрабатывал приложение для Windows Phone с использованием этого примера: Local Database SampleУдалить задачу не работает в контекстном меню?

В этом примере задача Удалить была реализована с использованием значка. Я изменил задачу удаления на Context Menu. Но это не работает для меня.

Если я нажал Delete, ничего не происходит.

Я не знаю, какую ошибку я сделал.

Мой модифицированный код:

XAML Код:

<TextBlock 
    Text="{Binding ItemName}" 
    FontWeight="Thin" FontSize="28" 
    Grid.Column="0" Grid.Row="0" 
    VerticalAlignment="Top"> 

    <toolkit:ContextMenuService.ContextMenu> 
    <toolkit:ContextMenu Name="ContextMenu"> 
    <toolkit:MenuItem Name="Delete" Header="Delete" Click="deleteTaskButton_Click"/> 
    </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 

</TextBlock> 

C# Код:

private void deleteTaskButton_Click(object sender, RoutedEventArgs e) 
    { 
     // Cast the parameter as a button. 
     var button = sender as TextBlock; 

     if (button != null) 
     { 
      // Get a handle for the to-do item bound to the button. 
      ToDoItem toDoForDelete = button.DataContext as ToDoItem; 
      App.ViewModel.DeleteToDoItem(toDoForDelete); 
      MessageBox.Show("Deleted Successfully"); 
     } 

     // Put the focus back to the main page. 
     this.Focus(); 
    } 

Работа оригинальный код в этом примере:

XAML Код:

<TextBlock 
    Text="{Binding ItemName}" 
    FontSize="{StaticResource PhoneFontSizeLarge}" 
    Grid.Column="1" Grid.ColumnSpan="2" 
    VerticalAlignment="Top" Margin="-36, 12, 0, 0"/> 
<Button         
    Grid.Column="3" 
    x:Name="deleteTaskButton" 
    BorderThickness="0" 
    Margin="0, -18, 0, 0" 
    Click="deleteTaskButton_Click"> 
<Image 
    Source="/Images/appbar.delete.rest.png" 
    Height="75" 
    Width="75"/> 
</Button> 

C# Код:

private void deleteTaskButton_Click(object sender, RoutedEventArgs e) 
    { 
     // Cast the parameter as a button. 
     var button = sender as Button; 

     if (button != null) 
     { 
      // Get a handle for the to-do item bound to the button. 
      ToDoItem toDoForDelete = button.DataContext as ToDoItem; 

      App.ViewModel.DeleteToDoItem(toDoForDelete); 

      MessageBox.Show("Deleted Successfully"); 
     } 

     // Put the focus back to the main page. 
     this.Focus(); 
    } 

ответ

0

В вашем случае sender не TextBlock, так что эта строка:

var button = sender as TextBlock; 

возвращается null

Вы можете направить его на MenuItem.

using Microsoft.Phone.Controls; 
.... 

private void deleteTaskButton_Click(object sender, RoutedEventArgs e) 
{ 

    var item = sender as MenuItem; 

    if (item!= null) 
    { 
     // Get a handle for the to-do item bound to the button. 
     ToDoItem toDoForDelete = item .DataContext as ToDoItem; 
     App.ViewModel.DeleteToDoItem(toDoForDelete); 
     MessageBox.Show("Deleted Successfully"); 
    } 

    // Put the focus back to the main page. 
    this.Focus(); 
} 
+0

Ошибка: 'Имя 'кнопка' не существует в текущем контексте' –

+0

Я обновил ответ. Вы должны отдать его в MenuItem –

Смежные вопросы