2013-07-01 5 views
0

바인딩 목록에 INotifyPropertyChanged 인터페이스가 있습니다. 모든 것이 잘 작동합니다. 이 바인딩 목록은 목록 상자에 바인딩 된 파일 이름 목록입니다. 전체 경로가 아닌 이름 만 표시되기를 원하지만 파일 이름을 선택하고 파일을로드 할 때 전체 경로가 필요합니다.IValueConverter 및 바인딩 목록의 모든 값을 변환하십시오.

나는이 목적을 위해 IValueConverter를 사용하는데, Path.GetFileName 속성을 사용하면 파일 이름의 전체 경로를 변경할 수 있습니다. 바인딩은 정확하지만 바인딩 목록에서 값을 변경하지 않습니다. 아래에 IValueConverter 코드를 붙여 넣습니다. 이 코드의 문제점을 알려주십시오. 나는 here 변환을 참조했다.

[ValueConversion(typeof(string), typeof(string))] 
public class pathtoname : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter ,CultureInfo culture) 
    { 
     BindingList<string> ls = value as BindingList<string>; 
     ls.Select(x => "WW"); 
     return ls;//all values should be WW. But they are not.(debugger) 
    } 

    public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture) 
    { 
     return null; 
    } 

} 

편집 : 값이 지금 변환됩니다. 하지만 이제 전체 경로를 다시 가져 오는 방법은 무엇입니까? 2 개의 목록을 보관해야합니까? 하나는 전체 경로이고 다른 하나는 here과 같은 이름입니다. 더 나은 해결책이 있습니까?

답변

1

파일 이름을 & FullPath는를 반환하려면 새 클래스를 만들 필요가 :에,

[ValueConversion(typeof(string), typeof(string))] 
public class pathtoname : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter ,CultureInfo culture) 
    { 
     BindingList<string> ls = value as BindingList<string>; 
     List<MyFile> files = new List<MyFile>(); 
     foreach (string s in ls) 
     { 
      files.Add(new MyFile() { Filename = Path.GetFileName(s), Fullpath = s }); 
     } 

     return files; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture) 
    { 
     return null; 
    } 
} 

마지막으로, 당신은 당신의 컨버터을 MyFile의 목록을 반환 한 후

public class MyFile 
{ 
    public string Filename { get; set; } 
    public string Fullpath { get; set; } 
} 

당신의 목록 상자, MyFile의 DataBinding 속성으로 검색 할 수 있습니다.

희망이 있습니다.

+0

확인. 효과가있었습니다. 하지만 지금 다른 문제가 생겼어. 내 로딩 파일이 전체 경로를 잃었습니다. 전체 경로를 유지하면서 파일 이름 만 표시하는 방법에 대한 팁 – Naresh

+0

파일 이름을 얻으려면 Path 정적 클래스에서 GetFileName 메서드를 살펴보십시오. http://msdn.microsoft.com/en-us/library/system.io.path.getfilename.aspx –

+0

아, 저도 압니다. . 파일 이름에서 다른 기능을 통해 파일을 전달할 수 있도록 전체 경로로 이동하려고합니다. 그러나 변환기는 정보를 잃어 버렸다. – Naresh