2013-07-01 20 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,你必須創建一個新的類:

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

後,你必須在你的轉換器返回MyFile的一個列表

[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; 
    } 
} 

最後,在Listbox,你可以使用MyFile的DataBinding屬性來檢索

希望它的幫助!

+0

好的。那工作。但我現在又有了另一個概率。我的加載文件丟失完整路徑。有關如何保持完整路徑但只顯示文件名的提示? – Naresh

+0

要獲取文件名,您可以嘗試從Path靜態類中查看GetFileName方法:http://msdn.microsoft.com/en-us/library/system.io.path.getfilename.aspx –

+0

啊,我知道。從文件名,我想要去一個完整的路徑,所以我可以通過另一個功能傳遞文件。但轉換器丟失了信息。 – Naresh

相關問題