2012-01-12 101 views
0

我有一個集合 private ObservableCollection<ImageData> imageDataList = new ObservableCollection<ImageData>(); ImageData是一個自定義對象。它具有一個稱爲fileName的屬性,該屬性存儲圖像文件的完整路徑。在我的XAML代碼中,我有一個帶有datatemplate的列表框,如下所示。將數據模板圖像綁定到WPF中的自定義對象屬性

<ListBox Name="listBox_ImageList" Grid.ColumnSpan="3" Grid.Row="2" SelectionChanged="listBox_ImageList_SelectionChanged"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 

     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding fileName}" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox, AncestorLevel=1}, Path=ActualHeight}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

填充ImagaData物體進入imageDataList後,我設置this.listBox_ImageList.ItemsSource = imageDataList;

然而,當我運行它,我沒有看到任何圖片。你能告訴我如何恰當地將數據綁定到WPF圖像源的對象的字符串成員?

+0

你看到_anything_?如果你註釋掉ListBox.ItemTemplate代碼(你應該看到[ImagaData.ToString()]),你看到了什麼? – 2012-01-12 16:05:32

回答

0

設置的DataContext到其中的ObservableCollection位於

DateContext = this; 
將其綁定

而且代替文件名到ImageSource的屬性或一個BitmapImage的屬性,這是使用創建的對象文件名。

+0

我想你可以使用像Juan Carlos Vega Neira建議的轉換器 – MyKuLLSKI 2012-01-12 16:30:56

0

回答您的問題:您無法將ImageSource屬性綁定到字符串。它在XAML中起作用,因爲當您在XAML中設置值時,WPF使用從字符串到ImageSource的默認轉換器。如果您想使用綁定或代碼設置值,則需要提供ImageSource對象。

有2種方式通過結合做到這一點:

第一個提出here(鏈接胡安·卡洛斯·提到的),它涉及到創建的IValueConverter,將您的字符串,並將其轉換爲一個ImageSource的。我會修改這個介紹那裏的轉換代碼:

public sealed class StringToImageSourceConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     try 
     { 
      return new BitmapImage(new Uri((string)value)); 
     } 
     catch 
     { 
      return DependencyProperty.UnsetValue; 
     } 
    } 

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

第二個選項是在你的ImageData類來創建你的ImageSource和直接綁定到它。

private ImageSource _imageSource 
public ImageSource ImageSource 
{ 
    get 
    { 
    if (_imageSource == null) 
    { 
     _imageSource = new BitmapImage(new Uri(fileName), UriKind.RelativeOrAbsolute); 
    } 
    return _imageSource; 
    } 
} 
相關問題