我试图在视觉上显示的项目(在我的情况下的BitmapImage)已被添加到一个集合中使用WPF / MVVM一个列表框。 为了让一些背景,我捕捉视频流与采集卡,而我拍摄静止图像,而视频流。 这些图像通过点击UI的“静止图像”按钮捕获。 捕获图像之后,我想为所述图像中在UI上的单独面板的缩略图。 我理解需要做这样做什么,但我似乎无法得到它的工作。 现在,我的模型做所有的数据检索。
public ObservableCollection<BitmapImage> GetAssetThumbnails()
{
var imageDir = ImgPath != null ? new DirectoryInfo(ImgPath) : null;
if(imageDir != null)
{
try
{
foreach (FileInfo imageFile in imageDir.GetFiles("*.jpg"))
{
var uri = new Uri(imageFile.FullName);
_assetThumbnails.Add(new BitmapImage(uri));
}
}
catch (Exception)
{
return null;
}
}
return _assetThumbnails;
}
我的视图模型建立在其构造模型的新实例,然后设置公共财产AssetCollection
等于_assetModel.GetAssetThumbnails()
该视图模型具有所有标准OnPropertyChanged事件和事件处理。
private void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#region Public Properties
public ObservableCollection<BitmapImage> AssetCollection
{
get { return _assetCollection; }
set
{
if (_assetCollection != value)
{
_assetCollection = value;
OnPropertyChanged("AssetCollection");
}
}
}
#endregion
private void _assetCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
OnPropertyChanged("AssetCollection");
}
public event PropertyChangedEventHandler PropertyChanged;
然后,在我的XAML文件,我绑定ListBox的项目源AssetCollection。
<ListBox x:Name="lstBoxAssets" ItemsSource="{Binding AssetCollection}" Grid.Row="1" Background="{DynamicResource GrayColor}" Margin="5,0,0,5" ></ListBox>
我读过,集合中的每个项目应实现INotifyPropertyChanged接口。 我试图创建为实现一个位图图像的包装类,但它也不能工作。 有没有办法,我缺少的东西在这里? 这些图像显示了最初,但图像已经被捕获并保存后,不要刷新。 我有一种感觉它从事件所产生PropertyChanged
没有得到调用。 我通过调试,当它的检查,因此,它始终是空注意到OnPropetyChanged
方法不会被调用。 我不知道我应该在哪里,虽然添加此事件处理程序。 我只用代码隐藏文件中添加视图模型到视图的数据上下文,这就是它。 这就是我通常会想添加任何事件处理。 任何人都可以看到,我在这里失踪简单的东西?