2010-01-14 5 views
2

Silverlight를 사용하여 파일 업로드 도구를 구현하고 있습니다. 이 파일에서 찾아 볼 수 있으며 파일을 선택하면 DataGrid에 바인딩됩니다. DataGrid에는 특정 항목을 DataGrid에서 삭제하고 Datagrid의 ItemSource는 List<> 인 버튼이있는 템플릿 열이 있습니다.TemplateColumn 버튼의 DataGrid 행을 클릭하십시오.

다음과 같이 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.*/ 
} 

입니다 항목을 클릭 한 단추가있는 DataGrid 행을 기반으로하고 List<UploadedFiles>에서 항목을 제거하고 DataGrid를 다시 바인딩하십시오.

감사

여기에서 보는

답변

2

두 가지 :

첫째

, 개별 UploadedFiles 개체를 얻을 수는 버튼 (또는 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 
} 
+0

+1 @Gareth입니다. – rahul

관련 문제