WPF循环滚动的界面数据更新问题

南天空 2016-04-17 12:13:05
我的WPF界面上有一个ScrollViewer里面是一个ListView,现在通过控制ScrollViewer的滚动条可以实现ListView的数据从上到下的平滑滚动,ListView中的数据来自于自定义的类,现在滚动实现了,但是怎么都实现不了在滚动过程中实时更新ListView的数据。
现在将滚动部分代码贴出来,求大神们指点怎么实现滚动中更新数据。试了不少办法了,都没解决,没招了ThreadPool,thread,Task都没有搞定。界面不是没反应就是卡死。求指点,着急!!
public ScreenScroll()
{
//滚动界面初始化数据代码
this.WindowState = System.Windows.WindowState.Maximized;
screenScrollViewModel = new ScreenScrollViewModel();
InitializeComponent();
//this.ListView1.DataContext = ScrollDataList1000;
this.DataContext = screenScrollViewModel;
this.ListView1.DataContext = screenScrollViewModel.ScrollDataCollection;
#region 用Timer来实现滚动
_scrollTimer = new System.Timers.Timer(1000);
_scrollTimer.Interval = 100;
_scrollTimer.Elapsed += new ElapsedEventHandler(OnTimerEclapse);
_scrollTimer.Enabled = true;
_scrollTimer.Start();
#endregion
}
#region 滚动界面
private void OnTimerEclapse(object sender,EventArgs ags)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new TimerDelegate(ScrollForTimer));
}

private delegate void TimerDelegate();
private void ScrollForTimer()
{
if (Xposition < 600000)
{
this.ScrollViewer1.ScrollToVerticalOffset(Xposition);
Xposition += 1;
}
else
{
DXposition = this.ScrollViewer1.ScrollableHeight;
//DXposition -= 10;
this.ScrollViewer1.ScrollToVerticalOffset(300);
DXposition -= 10;
}

}
#endregion
更新ListView数据的代码主要是重新初始化数据 screenScrollViewModel ,重新绑定到界面
//screenScrollViewModel = new ScreenScrollViewModel();
//this.DataContext = screenScrollViewModel;
//this.GroupDetail1.DataContext = screenScrollViewModel.groupDetailViewModel;
//this.ListView1.DataContext = screenScrollViewModel.ScrollDataCollection;
...全文
344 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
南天空 2016-05-09
  • 打赏
  • 举报
回复
谢谢了!。。。
为轮子而生 2016-04-17
  • 打赏
  • 举报
回复
另外,如果处于某些重要的数据变更原因导致你的整张表都要刷新,那没办法,不要使用绑定技术了,因为绑定就会导致阻塞UI线程,这时候只能用比较土(但却有效)的办法,三个步骤 ①自定义ItemsControl或重写ListBox,并设计ItemsPanelTemplate为一个StackPanel或ScrollViewer ②用DataTemplate定义ItemTemplate,DataType为你的数据类,同时用Grid分隔各个属性,使它看起来像一张多列的表 ③刷新表的时候,一条一条增加ItemsControl的项,而不是绑定
为轮子而生 2016-04-17
  • 打赏
  • 举报
回复
重新绑定数据,本来就是个很卡的过程,况且你在滚动的时候重新绑定整张表,还想很流畅,太高估程序的运算能力。 我的建议是,并不反对在滚动的时候更新列表,但不要全部更新,这违反程序设计的原则,你可以增加一些新项或删除部分项,这种需求并不是必须重新绑定才能实现的吧?既然已经绑定,修改绑定源就可以。
为轮子而生 2016-04-17
  • 打赏
  • 举报
回复
使用WPF专用的定时器:System.Windows.Threading.DispatcherTimer

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧