我是靠谱客的博主 开朗自行车,最近开发中收集的这篇文章主要介绍【WPF】修改数据层ViewModel后,UI界面未同步更新,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

界面:WPF(MVVM)中将集合类控件ItemsControl的ItemsSource绑定到了ViewModel中的ObservableCollection列表,ItemsControl.ItemTemplate模板中是一个Image图片控件。

问题:当数据层发生改变,例如列表新增一个元素后,若之后执行的代码想要立即获取到新增图片Image,会发现此时的UI层还未同步更新,不能获取新增的Image控件。即WPF的这种UI绑定数据的机制下,UI的更新是延迟的,而我不清楚UI到底什么时候更新的,找不到UI更新完成的回调。

解决办法:想到的一个办法是利用Image控件的Loaded事件。当触发Loaded事件时,即是UI层完成更新之时。于是准备一个计数器imageCount在Loaded事件中自增,当imageCount等于数据层ViewModel中ObservableCollection列表的count时,即是UI层完成更新,与数据层同步之时。(列表新增N个元素,数据层的更新是瞬间的,而UI层要一个一个的加载新增的Image控件。)

后台代码:

// 每层图片加载完成后计数,当计数等于图片层数时默认加载全部完成,做完成回调
private void DesignImage_Loaded(object sender, RoutedEventArgs e)
{
lock (lockObj)
{
if (imageCount == this.DesignControl.ItemContainerGenerator.Items.Count) // DesignControl是控件ItemsControl { imageCount = 0; // do something } } }

这只是处理了增加图片的情况。如果ViewModel中列表元素减少,即是想要删除图片列表中的部分图片,此时还需要将该计数器imageCount减少。

如果增加/删除列表元素的操作都在控制层,那么最好是将imageCount放到ViewModel中,方便给控制层调用以便于增加/减少。

最后

以上就是开朗自行车为你收集整理的【WPF】修改数据层ViewModel后,UI界面未同步更新的全部内容,希望文章能够帮你解决【WPF】修改数据层ViewModel后,UI界面未同步更新所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部