Wpf 将ListView绑定到位图的ObservableCollection

Wpf 将ListView绑定到位图的ObservableCollection,wpf,binding,observablecollection,Wpf,Binding,Observablecollection,我在将我的列表视图绑定到可观察集合时遇到一些问题 这是我的XAML: <ListView ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding Path=FrameImages}"> <ListView.ItemsPanel> <ItemsPanel

我在将我的
列表视图
绑定到
可观察集合
时遇到一些问题

这是我的
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);
}
public-observeCollection-FrameImages{get;set;}
公共主窗口()
{
初始化组件();
this.DataContext=this;
FrameImages=新的ObservableCollection();
位图img=新位图(@“E:\test\3047817.bmp”);
FrameImages.Add(img);
}
当我添加元素时,它似乎出现在
ListView
中,但它是透明的(只是一个空帧):/I我尝试将位图保存回文件中,没有出现任何问题(与原始位图相同)。我不知道为什么它不起作用:(

[编辑]
顺便说一句,如果我用
observatablecollection
替换
observatablecollection
,我的代码就可以工作。但是这里有一个额外的转换,它会影响程序的性能…这就是为什么我需要
Bitmap
你不能在WPF应用程序中使用这种方式。该类不属于WPF。它封装了GDI+位图,而。因此,您需要使用BitmapSource

但是,您可以简单地将ListView的属性绑定到一组图像路径字符串。WPF会自动执行从字符串到ImageSource的必要转换

如果确实需要手动创建位图,则应将集合定义为
ObservableCollection
,并通过以下方式创建集合元素:

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


您可能想了解一下。您应该熟悉WPF中的类层次结构。

谢谢,伙计:D您帮助了我!