首页 > > > WPF使用MVVM数据绑定时,UI未能及时更新
现在项目中使用有添加扫描件的功能,即将扫描仪中的图像保存下来。现在的问题是,在点击了程序中的“扫描”按钮后,在扫描仪扫描完成了,如果这时程序的窗口不是windows的活动窗口,比如切换到另外一个程序时,窗口绑定的扫描图像没有自动更新(可以看到绑定源已经更新了),这时再切换来回来时也不会更新,只有在窗口中的某个可以获取焦点的控件上移动一下鼠标什么的,UI就自动刷新了,这是哪里问题呢?
“扫描”按钮绑定的事件如下
public ICommand cmdScanFile
{
get
{
return new DelegateCommand<string>((arg) =>
{
var bg = new BackgroundWorker();
bg.DoWork += (a, b) =>
{
try
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
StartScan();
}), DispatcherPriority.ApplicationIdle);
}
catch (Exception ex)
{
}
finally
{
}
};
bg.RunWorkerAsync();
});
}
}扫描完成后,更新数据源代码如下
private void AddFiles(List<PersonFile> listFiles)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
var index = Files.Count + 1;
foreach (var file in listFiles)
{
file.Index = index;
Files.Add(file);
index++;
}
HasFiles = Files.Count > 0;
}), DispatcherPriority.ApplicationIdle);
}上面Files为ObservableCollection集合,PersonFile为文件对象,绑定时读取其文件路径。
发现这个问题是因为今天拿了一台扫描仪来测试,在安装了驱动后,多出两个扫描仪名称,一个是自身型号开头的,另外一个是WIA开头的,基实是一个机器,估计是驱动接口不同,之前本来就有一个虚拟扫描仪,现在一共三个,但只有使用这个机型型号开头的名称进行扫描时才会出现这个问题,其它两个不会。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/813/viewspace-3133999/ ,如需转载,请注明出处,否则将追究法律责任。