WPF - 将ObservableCollection绑定到ListView

时间:2017-05-02 10:02:09

标签: wpf listview binding observablecollection

我使用usb网络摄像头(aforge库)捕获图像并将捕获的图像存储在new-message

ObservableColection

public ObservableCollection<BitmapImage> Images { get; set; } 是我的视图模型类的属性。

Images

在我的class MainViewModel : INotifyPropertyChanged private ObservableCollection<BitmapImage> images = new ObservableCollection<BitmapImage>(); public ObservableCollection<BitmapImage> Images { get { return this.images; } set { if (images == value) return; this.images = value; OnPropertyChanged("Images"); // Using the INotifyPropertyChanged interface to raise property change events } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(name)); } } 我希望在SecondWindow中显示所捕获的图像。试过这个绑定:

Listview

并在构造函数

private SecondWindow OwnerWindow;
public MainViewModel OwnerWindowViewmodel { get; set; }

的Xaml:

this.OwnerWindow = (SecondWindow)window;
this.OwnerWindowViewmodel = OwnerWindow.OwnerWindowViewmodel;
OwnerWindowViewmodel = (MainViewModel)this.DataContext;

但我<ListView x:Name="ListView" ItemsSource="{Binding Images, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="345" Margin="567,10,10,0" VerticalAlignment="Top"> <ListView.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="1" HorizontalAlignment="Center" VerticalAlignment="Top"/> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Image Source="{Binding}" Height="150" Width="150"/> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> 中没有任何内容。我通过添加断点并调试捕获图像的数量及其在断点处的正确性进行测试(假设我已经捕获了2个图像,图像数量为2) 如何获取Listview中显示的捕获图像?

1 个答案:

答案 0 :(得分:-1)

我没有看到你的代码有什么问题,我认为问题在于BitmapImage集合。 请找到初始化BitmapImage的正确方法:

BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg");
image.EndInit();

OR

BitmapImage image = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg"));

PS:这只是一个例子,请确保以类似的方式初始化图像。

相关问题