2011-08-17 28 views
3

我對WPF比較陌生,所以如果有一個明顯的或簡單的答案,我不會看到。我可以將文本塊的內容綁定到可觀察集合中只有部分字符串嗎?

我有一個項目的ObservableCollection與每個不同大小的圖像。 每個圖像的相對路徑爲字符串格式,圖像文件存儲在不同的子文件夾中。

的圖像路徑是以下格式:

imagepath = @"subfolder/subfolder/filename.png" 

我想是能夠結合到一個文本塊,但僅示出每一個圖像下面的文件名而不改變圖像的路徑。這可能嗎?我收集它需要某種類型的轉換器,但是我一直在努力,因爲我無法找到合理的方式顯示字符串的一部分。

感謝您的幫助。

編輯

爲了澄清,我的「價值」是非靜態的,引用一個觀察的集合如項目。

ObservableCollection<Icon> items = new ObservableCollection<Item>(); 

items.Add(new Item{imagename = "someimagename", 
imagepath= "somefolder/somesubfolder/somefilename.png"}) etc... 

我只是開始接觸我的集合中的「獲取」值。任何幫助填充'value.Tostring()'部分來獲得item.imagepath的動態值將非常感激,所以我可以得到這個工作。

我目前已經沿着這些路線嘗試:

class getFilenameFromPathConverter : IValueConverter 
{  
    public object Convert(object value, Type targetType, object parameter, 
    System.Globalization.CultureInfo culture) 

     { Item item = value as Item; 
      PropertyInfo info = value.GetType().GetProperty("imagepath"); 
      string filename = info.GetValue(item, null).ToString(); 
      return System.IO.Path.GetFileNameWithoutExtension(filename); } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

但我發現了一個未處理的異常:System.NullReferenceException:對象不設置到對象的實例。

感謝

+0

我得到「的對象引用requried對於非靜態字段,方法或屬性......」這是假設你的意思是這樣做的: '回報系統.IO.Path.GetFileName(item.imagepath.ToString());' – Chris

+0

@Chris你可以在這裏粘貼你的文本框「文本」綁定表達式(XAML)嗎? –

+0

確定按照這些說明 1)在轉換器的「轉換」方法上放置一個斷點。 2)當斷點命中檢查正在傳遞的「值」參數。如果「值」參數等於您的文件路徑,那麼很好。如果不讓我知道。 3)如果第2步通過,則清空您的轉換方法並僅添加以下行: return Path.GetFileNameWithoutExtension(value。的ToString()); 試一試。 –

回答

1

XAML由脂肪指定。

你的轉換器應該是這樣的:

class getFilenameFromPathConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return Path.GetFileName(value.ToString()); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

謝謝 - 這是在正確的方向邁出的一大步,雖然我發現我需要GetFileNameWithoutExtension而不只是GetFileName。 但是,我的'值'是非靜態的,引用可觀察集合中的項目(請參閱編輯) – Chris

1

您需要爭取一個converter的幫助下得到這個值。

創建一個實現IValueConverter的類,並在Convert方法中返回想要顯示的字符串部分。

在你的TextBlock,您綁定的財產像{Binding Path=imagepath, Converter={StaticResource getFilenameFromPathConverter}}

+0

謝謝,是的,我想到了很多 - 很好有XAML,但我真的很努力與轉換器(見編輯),但gettign密切感謝@Zahid – Chris

相關問題