访问TemplateColumn上的Datagrid行按钮单击

时间:2010-01-14 05:40:09

标签: silverlight datagrid datagridtemplatecolumn

我正在使用Silverlight实现文件上传工具。在这里我可以浏览文件,当我选择一个文件然后它绑定到一个数据网格。在datagrid中,我有一个模板列,其中包含一个按钮,用于从数据网格中删除特定项目,并从数据网格中删除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.*/
}

我需要根据点击按钮所在的datagrid行访问特定列表项,并从List<UploadedFiles>中删除该项并重新绑定数据网格。

由于

1 个答案:

答案 0 :(得分:2)

这里要看两件事:

首先,要获取单个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
}