wpf画面ListBox绑定的数据发生变化时 画面闪烁
ListBox的ItemsSource属性绑定了一个ObservableCollection集合,在画面隐藏时对集合进行添加项或删除项操作后,再显示画面时ListBox会...
ListBox的ItemsSource属性绑定了一个ObservableCollection集合,在画面隐藏时对集合进行添加项或删除项操作后,再显示画面时ListBox会从操作前的状态闪烁到操作后的状态。
这个是否因为虽然绑定数据已经变化但画面必须在显示时才能刷新。能不能在后台刷新让画面显示时没有闪烁的过程
只能发一部分代码,希望有帮助
集合数据绑定:
<ListBox Name="lstbox" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding mylist}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="Transparent" BorderThickness="0">
图片绑定:
<ImageBrush ImageSource="{Binding ResourceUri, Converter={StaticResource uriToImageConv}}"/>
注:uriToImageConv中的转换代码
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(value.ToString());
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.EndInit();
return bi;
数据量不大,集合中只有2个元素时移除其中一个也会闪烁,每个元素中有一个图片地址的属性绑定到画面的ImageBrush控件上显示用,这个地址是经过BitmapImage转换后绑定的,不知道是否和这个有关系 展开
这个是否因为虽然绑定数据已经变化但画面必须在显示时才能刷新。能不能在后台刷新让画面显示时没有闪烁的过程
只能发一部分代码,希望有帮助
集合数据绑定:
<ListBox Name="lstbox" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding mylist}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="Transparent" BorderThickness="0">
图片绑定:
<ImageBrush ImageSource="{Binding ResourceUri, Converter={StaticResource uriToImageConv}}"/>
注:uriToImageConv中的转换代码
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(value.ToString());
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.EndInit();
return bi;
数据量不大,集合中只有2个元素时移除其中一个也会闪烁,每个元素中有一个图片地址的属性绑定到画面的ImageBrush控件上显示用,这个地址是经过BitmapImage转换后绑定的,不知道是否和这个有关系 展开
2个回答
展开全部
ObervableCollection集合是响应修改的,当集合修改时,会触发ObervableCollection集合对形象的PropertyChanged事件,绑定后WPF会自动响应事件,并对界面做出调整。
按道理讲,你修改集合之后,ListBox中的各个Node是各自刷新显示的,也就是你改了那个刷新哪个,你的问题估计是处在是否是在修改后调用了最高Node的OnPropertyChanged方法或者绑定重新执行了一遍,还有可能是ListBox控件重新载入,重新初始化造成的。
你没有具体说,我也不能确定。
至于刷新方法那是没有。
总结一下:
1.最高Node的OnPropertyChanged方法
2.绑定重新执行了一遍
3.ListBox控件重新载入
以上三中情况会造成那种效果,你排查一下吧。
按道理讲,你修改集合之后,ListBox中的各个Node是各自刷新显示的,也就是你改了那个刷新哪个,你的问题估计是处在是否是在修改后调用了最高Node的OnPropertyChanged方法或者绑定重新执行了一遍,还有可能是ListBox控件重新载入,重新初始化造成的。
你没有具体说,我也不能确定。
至于刷新方法那是没有。
总结一下:
1.最高Node的OnPropertyChanged方法
2.绑定重新执行了一遍
3.ListBox控件重新载入
以上三中情况会造成那种效果,你排查一下吧。
追问
好,先感谢两位的答案,我先按这些检查一下,希望各位继续提出好主意,呵呵
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询