2

Silverlight を使用してファイル アップロード ツールを実装しています。これでファイルを参照でき、ファイルを選択するとデータグリッドにバインドされます。データグリッドには、データグリッドから特定のアイテムを削除するためのボタンと、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 を次のように設定して、以下のような templatecolumn を持つデータグリッドを使用しています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

ここで注目すべき 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 に答える