2015-04-15 4 views
-1

У меня есть список сеток и 2 кнопки в каждой сетке. Одна из этих кнопок - кнопка удаления, поэтому мне нужно отправить Coletor в мое событие click, чтобы изменить его атрибут. Как я могу передать мой Coletor на мой клик?Как изменить атрибут в событии клика?

Мой метод, который создает сетки:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (NavigationContext.QueryString["email"] != null) 
     { 
      email = NavigationContext.QueryString["email"]; 
     } 

     List<Grid> listaGrids = new List<Grid>(); 

     int i = 0; 

     AppDataContext db = new AppDataContext(); 

     Pessoa pessoa = db.Pessoas.Single(c => c.Email == email); 

     foreach (Coletor coletor in pessoa.Coletores) 
     { 
      if (coletor.Ativado == true) 
      { 
       Grid aux = new Grid(); 
       ColumnDefinition c1 = new ColumnDefinition(); 
       ColumnDefinition c2 = new ColumnDefinition(); 
       ColumnDefinition c3 = new ColumnDefinition(); 

       aux.Width = 440; 
       aux.Height = 80; 

       aux.VerticalAlignment = VerticalAlignment.Center; 

       c1.Width = new System.Windows.GridLength(220); 
       c2.Width = new System.Windows.GridLength(80); 
       c3.Width = new System.Windows.GridLength(80); 



       coletorAux = coletor; 

       aux.ColumnDefinitions.Add(c1); 
       aux.ColumnDefinitions.Add(c2); 
       aux.ColumnDefinitions.Add(c3); 

       RowDefinition r1 = new RowDefinition(); 

       aux.RowDefinitions.Add(r1); 

       HyperlinkButton aux2 = new HyperlinkButton(); 
       aux2.Content = coletor.Nome; 
       aux2.FontSize = 42; 
       aux2.NavigateUri = new Uri("/OcorrenciasPage.xaml?coletorId=" + coletor.Id.ToString(), UriKind.RelativeOrAbsolute); 
       i++; 

       Button btnEdit = new Button(); 

       var brush = new ImageBrush(); 

       brush.ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri("/icons/edit.png", UriKind.RelativeOrAbsolute)); 

       btnEdit.Background = brush; 

       btnEdit.Width = 80; 
       btnEdit.Height = 80; 

       btnEdit.Click += btnEdit_Click; 

       Button btnDelete = new Button(); 

       ImageBrush brush2 = new ImageBrush(); 

       brush2.ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri("/icons/delete.png", UriKind.RelativeOrAbsolute)); 

       btnDelete.Background = brush2; 

       btnDelete.Width = 80; 
       btnDelete.Height = 80; 

       btnDelete.Click += btnDelete_Clickrr; 

       Grid.SetColumn(aux2, 0); 
       Grid.SetColumn(btnEdit, 1); 
       Grid.SetColumn(btnDelete, 2); 
       Grid.SetRow(aux2, 0); 
       Grid.SetRow(btnEdit, 0); 
       Grid.SetRow(btnDelete, 0); 



       aux.Children.Add(aux2); 
       aux.Children.Add(btnEdit); 
       aux.Children.Add(btnDelete); 

       listaGrids.Add(aux); 
      } 
     } 

     ListBox coletores = new ListBox(); 
     coletores.ItemsSource = listaGrids; 
     stcList.Children.Add(coletores); 

     base.OnNavigatedTo(e); 
    } 

И мой щелчок событие:

void btnDelete_Click(object sender, RoutedEventArgs e) 
    { 
     if (MessageBox.Show("Deseja realmente excluir esse coletor?", "Confirmação", MessageBoxButton.OKCancel) == MessageBoxResult.OK) 
     { 

     } 
    } 
+0

Ваш вопрос очень трудно понять. Я предполагаю, что вы хотите удалить выбранный элемент в (список? Grid? Anything else?) И удалить его, поэтому вам не нужно ничего пропускать к вашей кнопке, проверьте, какой элемент выбран. – Gusman

ответ

2

Вы можете присвоить Coletor свойству Tag данной кнопки

btnDelete.Tag = coletor; 

, а затем вернуться на мероприятие:

var coletor = ((sender as Button).Tag as Coletor); 

Это немного неуклюже, но это сработает.

+1

Общим для свойства Tag является хранение данных, которые тесно связаны с элементом управления. Например, если у вас есть элемент управления, который отображает информацию о клиенте, вы можете сохранить DataSet, который содержит историю заказов клиента в свойстве тега элемента управления, чтобы к ним можно было быстро получить доступ. [Свойство Control.Tag] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag%28v=vs.110%29.aspx?f=255&MSPPError=- 2147217396) – MVCDS

+0

@ MVCDS: Я нахожу данные в тегах немного «анонимными». Они не объясняют, что они, вы должны знать уже. Если бы появился другой кодер, они могли бы случайно использовать тег для чего-то другого. Но использовать их не стоит. Личный выбор и обстоятельства, я думаю. :) – Ulric

+0

, но единственный способ, которым я мог думать, это то, на что я ответил, относится к одной и той же проблеме, но использует протокол HTML, что еще хуже, поэтому я проголосовал за ваш ответ. – MVCDS

0

Дайте кнопку атрибут ...

//after creating the button 
btnDelete.Attributes.Add('coletorId', coletorId.ToString()); 

... восстановить то, что uou нужно на отправителе

//inside btnDelete_Click 
Button btnDelete = (Button) sender; 
string attr = btnDelete.Attributes['coletorId']; 
Guid id = Guid.Parse(attr); 
Coletor = db.Coletores.SingleOrDefault(p => p.id == id); 

.NET API может быть неправильно, но я думаю, что общая идея верно.

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