【问题标题】:How do I refresh a DataGrid at timed intervals in F#?如何在 F# 中按时间间隔刷新 DataGrid?
【发布时间】:2009-07-12 14:12:59
【问题描述】:

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

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

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

... 让赢=新窗口() 让网格 = DataGrid() grid.HeadersVisibility ] 做 让应用程序=新应用程序() app.Run() |> 忽略

【问题讨论】:

    标签: wpf datagrid f# refresh


    【解决方案1】:

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

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

    防止使用 Thread.Sleep。

    【讨论】:

    • 添加
       let timer = new DispatcherTimer(); timer.Interval  grid.Items.Refresh()) timer.Start() 
      正在完成这项工作!谢谢!
    【解决方案2】:

    无法在 cmets 中使用格式,所以这里是我的回应。

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

    [] 做 让应用程序=新应用程序() 让计时器 = 新的 DispatcherTimer() timer.Interval grid.Items.Refresh()) timer.Start() app.Run() |> 忽略

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

    但是,如果我执行这个技巧:

    timer.Tick.Add (fun _ -> grid.ItemsSource

    它可以正常刷新,但会丢失排序顺序。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 数组的更新率很高,我真的需要定时刷新数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多