2017-12-30 81 views
0

3 가지 속성으로 공용 클래스를 만들었습니다. 코드는 다음과 같습니다.클래스의 public 속성에 액세스 할 수 없습니다.

public class FileInformation 
{ 
    public String Name { get; set; } 
    public DateTime CreationTime { get; set; } 
    public DateTime LastModified { get; set; } 
} 

이 클래스를 사용하여 Datagrid에 로컬 폴더의 파일을 채 웁니다. 그 때문에 다음 코드를 사용하고 있습니다. 이제

 DirectoryInfo di = new DirectoryInfo(@"db\"); 
     List<FileInfo> files = di.GetFiles("*.accdb").ToList(); 

     List<FileInformation> view1 = new List<FileInformation>(); 
     foreach (FileInfo file in files) 
     { 
      view1.Add(new FileInformation() { Name = file.Name, CreationTime = file.CreationTime, LastModified = file.LastWriteTime }); 
     } 

     listview_openproject.ItemsSource = view1; 

, 나는 데이터 그리드에서 선택되어있는 파일을 감지 할 수 있도록하고 싶습니다, 그래서 나는 다음과 같이 시도했다;

var selectedProject = listview_openproject.SelectedValue; 

이렇게하면 Name, Creationtime 및 LastModified의 3 가지 속성을 가진 개체가 생성됩니다. 여태까지는 그런대로 잘됐다. attibute "Name"에 액세스하려고하지만 그렇게 할 수 없습니다. 나는 내가 쓸 수있을 것으로 기대했다;

var selectedProjectName = selectedProject.Name; 

하지만 이는 작동하지 않습니다. 이 숙박 시설에 어떻게 액세스 할 수 있습니까? VS에서

스크린 샷 :

enter image description here

+1

'var selectedProject = (FileInformation) listview_openproject.SelectedValue'을 시도 했습니까? –

+0

_var로 시도해보십시오 selectedProject = listview_openproject.SelectedValue as FileInformation; _ – Steve

답변

2

SelectedItem 속성 목록이 바인딩 전체 개체를 반환합니다. 이 속성을 대신 사용하십시오 :

FileInformation fi = (FileInformation)listview_openproject.SelectedItem; 
String name = fi.Name; 
+1

null 확인이 잘못된 경우 중 하나입니다. 'fi'는 결코 null이 아니어야하고 어딘가에 버그가 있다면 –

+0

감사합니다, 매력처럼 작동합니다! –

+0

@CamiloTerevinto 통찰력에 감사드립니다. –