2

我正在使用 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>并重新绑定数据网格。

谢谢

4

1 回答 1

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
}
于 2010-01-14T06:28:21.740 回答