您好,我是新来的,以前是相当被动的读者。 我正在学习WPF + MVVM,我认为我在整个绑定概念中缺少一些东西。 我正在使用flycapture2 SDK作为点灰色相机,根据附加示例我应该在图像接收事件上调用_ProgressChanged并将接收到的图像绑定到image.source属性
private void m_worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
BitmapSource image = (BitmapSource)e.UserState;
this.Dispatcher.Invoke(DispatcherPriority.Render,
(ThreadStart)delegate ()
{
image.Source = image;
}
);
}
但这对我来说并不好看,因为我们只是在每次新图像到达时都会覆盖源图像。
我尝试做的事情(遵循一些在线教程)是通过ViewModel属性Images_s绑定Image控件源属性,后面是窗口代码(将DataContext设置为ViewModel)然后我希望每次更改viewModel。 Images_s它应该更新UI。 不幸的是,这不起作用,而是我有一个空窗口。
另外 - 我是否需要发送此任务?正如我想象的那样绑定应该在窗口代码背后的图像变量更改事件时更新UI本身(或者我是否过高估计WPF超能力?) 谢谢,
<Image Name="myImage" Source="{Binding Image_s}" Stretch="UniformToFill"/>
视图模型:
public class ViewModel : INotifyPropertyChanged
{
private BitmapSource img;
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
public BitmapSource Image_s
{
get { return this.img; }
set
{
this.img = value;
this.NotifyPropertyChanged("Image_s");
}
}
窗口代码:
viewModel = new ViewModel();
this.DataContext = viewModel;
视图模型:
private void m_worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
BitmapSource image = (BitmapSource)e.UserState;
this.Dispatcher.Invoke(DispatcherPriority.Render,
(ThreadStart)delegate ()
{
viewModel.Image_s = image;
}
);
}