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您帮助了我!