我正在使用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>
中删除该项并重新绑定数据网格。
由于
答案 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
}