2015-05-03 3 views
0

Отметьте выпадающее меню из Facebook. Я хочу реализовать что-то подобное. При нажатии «Slet» предполагается удалить это уведомление из списка. enter image description hereКак узнать, какую кнопку я нажал?

private void AddNotificationsToPanel(List<Notification> notifications, StackPanel panel) 
{ 
    panel.Children.Clear(); 


    foreach (var notification in notifications) 
    { 
     //We want every message to have text, a delete button and a postpone button 
     //So we need a nested stackpanel: 
     var horizontalStackPanel = new StackPanel(); 
     horizontalStackPanel.Orientation = Orientation.Horizontal; 
     panel.Children.Add(horizontalStackPanel); 

     //Display the message: 
     var text = new TextBlock(); 
     text.Text = notification.Message; 
     text.Foreground = Brushes.Black; 
     text.Background = Brushes.White; 
     text.FontSize = 24; 
     horizontalStackPanel.Children.Add(text); 

     //Add a delete button: 
     var del = new Button(); 
     del.Content = "Slet"; 
     del.FontSize = 24; 
     del.Command = DeleteNotificationCommand; 
     horizontalStackPanel.Children.Add(del); 

     //Add a postpone button: 
     var postpone = new Button(); 
     postpone.Content = "Udskyd"; 
     postpone.FontSize = 24; 
     postpone.IsEnabled = false; 
     horizontalStackPanel.Children.Add(postpone); 
    } 
    panel.Children.Add(new Button { Content = "Luk", FontSize = 24, Command = ClosePopupCommand }); 
} 

В принципе, у меня есть вертикальный StackPanel с количеством й горизонтальных stackpanels. У каждого из них есть текстовое поле и две кнопки. Как узнать, на какую кнопку я нажал? Кнопки все связаны с удаления команды, но я вроде не уверен, как они работают:

public ICommand DeleteNotificationCommand 
{ 
    get{ 
     return new RelayCommand(o => DeleteNotification()); 
    } 
} 

Который затем создать этот метод:

private void DeleteNotification() 
{ 
    Notifications.Remove(NotificationForDeletion); 
    AddNotificationsToPanel(Notifications, Panel); 
} 

Проблема в том, мы не знаем, какие уведомления для удаления, потому что я не знаю, как увидеть, какая кнопка была нажата. Есть идеи?

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

2

Вы должны использовать свойство кнопки CommandParameter, присвоив ему уникальный идентификатор каждого уведомления. Я предполагаю, что ваше уведомление имеет уникальный целочисленный идентификатор:

//Add a delete button: 
var del = new Button(); 
del.Content = "Slet"; 
del.FontSize = 24; 
del.Command = DeleteNotificationCommand; 
del.CommandParameter = notification.Id; // <-- unique id 
horizontalStackPanel.Children.Add(del); 

Затем в способе DeleteNotification, необходимо указать параметр для ключа.

public ICommand DeleteNotificationCommand 
{ 
    get{ 
     return new RelayCommand(DeleteNotification); 
    } 
}  
private void DeleteNotification(object parameter) 
{ 
    int notificationId = (int)parameter; 
    var NotificationForDeletion = ...; // <--- Get notification by id 
    Notifications.Remove(NotificationForDeletion); 
    AddNotificationsToPanel(Notifications, Panel); 
} 

Теперь в DeleteNotification вы можете идентифицировать уведомление, связанное с кнопкой.

+0

У меня нет идентификатора в классе Notification, но я делаю это сейчас! –

+0

На самом деле это работает, просто написав это: верните новый RelayCommand (DeleteNotification); Но спасибо за вашу помощь! –

+0

Добро пожаловать, да, я должен угадать, что тоже работает, я обновил ответ. –

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