【发布时间】:2012-10-06 19:44:30
【问题描述】:
我有一定的数据网格,我需要“刷新”每……让我们说 1 分钟。
计时器是最好的选择吗?
public PageMain()
{
InitializeComponent();
DataGridFill();
InitTimer();
}
private void InitTimer()
{
disTimer = new Timer(new TimeSpan(0, 1, 0).TotalMilliseconds);
disTimer.Elapsed += disTimer_Elapsed;
disTimer.Start();
}
void disTimer_Elapsed(object sender, ElapsedEventArgs e)
{
DataGridFill();
}
private void DataGridFill()
{
var items = GetItems(1);
ICollectionView itemsView =
CollectionViewSource.GetDefaultView(items);
itemsView.GroupDescriptions.Add(new PropertyGroupDescription("MyCustomGroup"));
// Set the view as the DataContext for the DataGrid
AmbientesDataGrid.DataContext = itemsView;
}
有没有更“脏”的解决方案?
【问题讨论】:
-
“刷新”是什么意思?您希望网格中的数据每 1 分钟更新一次吗?
-
是的,正是……在这里,让我编辑和改写
-
“刷新”DataGrid 的最佳方式是将其绑定到项目集合,并每 X 分钟更新项目的源集合。这样您就不必引用 DataGrid 本身,因此您的 UI 逻辑和应用程序逻辑保持分离,如果您的刷新需要一段时间,您可以在后台线程上运行它而不会锁定您的 UI。
-
问题是因为这是一个定时器,它开始一个额外的线程。因此更改上下文或 ItemSource 会引发 InvalidOperationException ...我现在正在研究
BackgroundWorker。我想这可能会有所帮助。 -
@apacay 使用
Timer或DispatcherTimer。您不能直接从另一个线程更新集合,但您可以将数据放入另一个线程的临时集合中,然后在主线程上更新绑定集合中的数据。
标签: c# wpf refresh wpfdatagrid silverlight-5.0