0

我有一个更新数组的后台线程。我每隔一段时间就会调用 myDataGrid.Items.Refresh()。然而,屏幕上没有任何变化。但是,例如,当我单击屏幕上数据网格的列标题时,信息会立即变为现实。

我喜欢以定时间隔(例如每 2 秒)查看屏幕上的变化。我错过了什么?

下面是 F# 中显示这种情况的代码片段:

...

让赢=新窗口()
让网格 = DataGrid()
grid.HeadersVisibility <- DataGridHeadersVisibility.All
grid.ItemsSource <- myArray
win.Content <- new ScrollViewer(Content=grid)
win.show()
...
//后台线程A
// 更新 myArray

...

//后台线程B
让 updateDataGrid =
  grid.Items.Refresh()
  线程.睡眠(5000)
  更新数据网格

...

[<STA线程>]
做
  让应用程序=新应用程序()
  app.Run() |> 忽略
4

3 回答 3

1

您是否尝试过 DispatcherTimer?(下面的代码在 C# 中)

timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer1_Tick;

防止使用 Thread.Sleep。

于 2009-07-12T14:22:19.677 回答
0

不能在评论中使用格式,所以这里是我的回复。

如果我写,计时器实际上可以工作:

[<STA线程>]
做
  让应用程序=新应用程序()
  让计时器 = 新的 DispatcherTimer()
  timer.Interval <- TimeSpan.FromSeconds(2.)
  timer.Tick.Add (fun _ -> grid.Items.Refresh())
  timer.Start()
  app.Run() |> 忽略

但是现在问题几乎逆转了,它会自动更新,直到我单击任何列标题进行排序。之后就没有更多的刷新了。

但是,如果我执行此技巧:

  timer.Tick.Add (fun _ ->
                    grid.ItemsSource <- null
                    grid.ItemsSource <- myArray
                    grid.Items.Refresh())

它刷新得很好,但失去了排序顺序。

如何维护排序顺序?我可以轻松地对数组进行排序,但我也喜欢用户自己排序。

于 2009-07-12T14:51:29.833 回答
0

由于您已经在使用 WPF,是否可以将该数组转换为 ObservableCollection?最后我听说,DataGrids 支持它。如果集合中的对象已经是 DependencyObjects,那么它们的 DependancyProperties 应该在网格中自动更新。如果没有,您可以手动将它们重新插入到集合中。

于 2009-07-13T00:14:18.470 回答