2013-01-17 28 views
0

的的ObservableCollection我有一些問題,結合我ListViewObservableCollection<Bitmap> ...綁定的ListView位圖

這是我XAML:背後

<ListView ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Disabled" 
     ItemsSource="{Binding Path=FrameImages}"> 
<ListView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel 
      Width="Auto" 
      ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}" 
      ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" /> 
    </ItemsPanelTemplate> 
</ListView.ItemsPanel> 

<ListView.ItemTemplate> 
    <DataTemplate> 
     <Border Width="100" Height="75" BorderThickness="1" BorderBrush="DarkGray" VerticalAlignment="Center" Margin="7,5,7,5"> 
      <Image Margin="5,5,5,5" Width="100" Height="75" Source="{Binding}" Stretch="Fill"></Image> 
     </Border> 
    </DataTemplate> 
</ListView.ItemTemplate> 
</ListView> 

代碼:

public ObservableCollection<Bitmap> FrameImages { get; set; } 
public MainWindow() 
{ 
    InitializeComponent(); 

    this.DataContext = this; 

    FrameImages = new ObservableCollection<Bitmap>(); 
    Bitmap img = new Bitmap(@"E:\test\3047817.bmp"); 
    FrameImages.Add(img); 
} 

當我添加該元素,它似乎出現在ListView,但它是透明的(只是一個空框架):/我試圖保存b它映射回文件,並沒有問題(與原來的一樣)。我不知道爲什麼它不工作:(

[編輯]
順便說一句,如果我取代ObservableCollection<Bitmap>ObservableCollection<BitmapSource>我的代碼工作。但這裏有一個額外的轉換這會影響程序的性能......這就是爲什麼我需要Bitmap

回答

2

你不能在WPF應用程序中使用System.Drawing.Bitmap這樣。類不屬於WPF,它封裝了GDI +位圖,而WPF is based in DirectX。因此,你需要使用的BitmapSource。

你可能然而簡單地綁定ItemsSource您的ListView屬性的圖像路徑字符串的集合。從字符串到ImageSource的必要轉換由WPF自動執行。

如果你真的需要手動創建位圖,你應該是這樣定義你的收藏爲ObservableCollection<ImageSource>和創建收集要素:

var img = new BitmapImage(new Uri(@"E:\test\3047817.bmp")); 
FrameImages.Add(img); 

你可能想看看進入Imaging Overview。你應該讓自己熟悉WPF中的BitmapSource類層次結構。

+0

謝謝隊友:D你幫了我! – Nickon