单击 TemplateColumn 按钮上的访问 Datagrid 行

Posted

技术标签:

【中文标题】单击 TemplateColumn 按钮上的访问 Datagrid 行【英文标题】:Access Datagrid row on TemplateColumn button click 【发布时间】:2011-01-04 23:10:58 【问题描述】:

我正在使用 Silverlight 实现文件上传工具。在此我可以浏览文件,当我选择一个文件时,它会绑定到一个数据网格。在数据网格中,我有一个带有按钮的模板列,用于从数据网格和数据网格的 ItemSource 中删除特定项目,即 List<>

我有一个如下所示的 UploadedFiles 类。

public class UploadedFiles

    public FileInfo FileInfget;set;
    public int UniqueIDget;set;
    public string FileNameget;set;
    public string FileExtensionget;set;
    public long FileSizeget;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&lt;UploadedFiles&gt; 中删除该项目并重新绑定数据网格。

谢谢

【问题讨论】:

【参考方案1】:

这里有两件事要看:

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

【讨论】:

以上是关于单击 TemplateColumn 按钮上的访问 Datagrid 行的主要内容,如果未能解决你的问题,请参考以下文章

单击特定网站上的 javascript 按钮时获取直接 URL

Javascript/HTML/Puppeteer - 如何访问属性数据绑定中的值(单击按钮)?

如何从按钮上的网页重新启动iDevice单击

在执行功能时单击导航控制器上的后退按钮时应用程序崩溃

如何在Android中访问菜单按钮onLongClick?

带有图像的访问表单命令按钮上的快捷键