单击 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<UploadedFiles>
中删除该项目并重新绑定数据网格。
谢谢
【问题讨论】:
【参考方案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