Доступ к строке таблицы данных по нажатию кнопки TemplateColumn - PullRequest
2 голосов
/ 14 января 2010

Я использую инструмент загрузки файлов с использованием Silverlight. В этом я могу просматривать файлы, и когда я выбираю файл, он привязывается к сетке данных. В сетке данных у меня есть столбец шаблона с кнопкой для удаления конкретного элемента из сетки данных и ItemSource сетки данных, которая является List<>.

У меня есть класс UploadedFiles, как показано ниже.

public class UploadedFiles
{
    public FileInfo FileInf{get;set;}
    public int UniqueID{get;set;}
    public string FileName{get;set;}
    public string FileExtension{get;set;}
    public long FileSize{get;set;}
}

Я использую сетку данных со столбцом шаблона, как показано ниже, с ItemSource, установленным как List<UploadedFiles>

<data:DataGridTemplateColumn Width="100">
  <data:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Button Click="btn_Click" Content="Del" Width="45"/>
    </DataTemplate>
   </data:DataGridTemplateColumn.CellTemplate>
  </data:DataGridTemplateColumn>

, а обработчик события нажатия кнопки -

private void btn_Click(object sender, System.Windows.RoutedEventArgs e)
{
    /* I need to access the particular list item based on the datagrid
       row in which the clicked button resides.*/
}

Мне нужно получить доступ к конкретному элементу списка на основе строки таблицы данных, в которой находится нажатая кнопка, удалить элемент из List<UploadedFiles> и заново привязать сетку данных.

Спасибо

1 Ответ

2 голосов
/ 14 января 2010

Здесь есть две вещи:

Во-первых, чтобы получить отдельный объект UploadedFiles, приведите отправителя к Button (или FrameworkElement) и получите доступ к свойству DataContext. DataContext будет строкой UploadedFiles (вам нужно будет снова привести объект из объекта).

Во-вторых, вместо того, чтобы удалить элемент из списка и выполнить повторную привязку, рассматривали ли вы вместо этого использование ObservableCollection? Если вы используете это, удаление строки автоматически удалит ее из DataGrid без необходимости повторного связывания.

private void btn_Click(object sender, System.Windows.RoutedEventArgs e)
{
    var uploadedFiles = (UploadedFiles)((FrameworkElement)sender).DataContext;

    //access collection and remove element
}
...