WPF-将ObservableCollection绑定到ListView
我正在使用usb网络摄像头(一个RGE库)捕获图像,并将捕获的图像存储在WPF-将ObservableCollection绑定到ListView,wpf,listview,binding,observablecollection,Wpf,Listview,Binding,Observablecollection,我正在使用usb网络摄像头(一个RGE库)捕获图像,并将捕获的图像存储在observelection public ObservableCollection<BitmapImage> Images { get; set; } 在我的second窗口中我想在我拥有的列表视图中显示捕获的图像。已尝试此绑定: private SecondWindow OwnerWindow; public MainViewModel OwnerWindowViewmodel { get; set; }
observelection
public ObservableCollection<BitmapImage> Images { get; set; }
在我的second窗口中
我想在我拥有的列表视图中显示捕获的图像。已尝试此绑定:
private SecondWindow OwnerWindow;
public MainViewModel OwnerWindowViewmodel { get; set; }
和在构造函数中
this.OwnerWindow = (SecondWindow)window;
this.OwnerWindowViewmodel = OwnerWindow.OwnerWindowViewmodel;
OwnerWindowViewmodel = (MainViewModel)this.DataContext;
Xaml:
但是我的列表视图中没有任何内容。我已经通过添加断点和调试捕获图像的计数及其在断点处的正确性进行了测试(假设我捕获了2个图像,图像的计数为2)
如何在我的列表视图中显示捕获的图像?我看不出您的代码有任何问题,我认为问题在于BitmapImage集合。
请找到初始化位图图像的正确方法:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg");
image.EndInit();
或
PS:这只是一个例子,请确保您正在以类似的方式初始化图像。调试输出中有任何绑定错误吗?您的视图中是否将ViewModel设置为DataContext?如果您没有提供最基本的信息,您认为我们可以如何帮助您?如何创建和显示第二个窗口,以及如何将视图模型实例传递给其DataContext?请注意,在ItemsSource绑定上设置Mode=TwoWay
和UpdateSourceTrigger=PropertyChanged
是毫无意义的。我在视图中将ViewModel设置为DataContext,除此之外,这并没有回答问题,这里显示的不是“初始化位图图像的正确方法”,而是一种方法。您也可以使用带有Uri参数的BitmapImage构造函数,从而保存BeginInit和EndInit调用。我在测试项目中使用了相同的代码,我可以看到图像(我在本地加载的),如果集合正常,则数据上下文绑定一定有问题。
<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>
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg");
image.EndInit();
BitmapImage image = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg"));