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

我正在使用 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&lt;UploadedFiles&gt; 中删除该项目并重新绑定数据网格。

谢谢

【问题讨论】:

    标签: silverlight datagrid datagridtemplatecolumn


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      相关资源
      最近更新 更多