如何每 1 分钟自动刷新一次 WPF 上的数据网格

本文关键字:WPF 一次 网格 数据网 数据 分钟 何每 刷新 | 更新日期: 2023-09-27 17:57:12

我希望能够刷新我的数据网格,因为我正在更新数据库数据网格上的表并希望查看网格的变化,有没有办法每 1 分钟自动更新一次数据网格?

如何每 1 分钟自动刷新一次 WPF 上的数据网格

DataGrid.Items.Refresh()将刷新项目。 然后,您可以使用计时器每分钟运行一次以强制刷新

下面是实现计时器以更新列表框的示例,您可以根据自己的目的对其进行调整。

今后,您可以使用ObservableCollection来绑定网格,以避免手动刷新。

我最终使用了DispatcherTimer 它为我简化了一些线程问题:

    private static DispatcherTimer _dataUpdateTimer = null;
    private ObservableCollection<Item> _items;
    public ObservableCollection<Item> Items
    {
        get { return _items; }
        set
        {
            if (_items == value)
                return;
            _items = value;
            this.OnPropertyChanged(nameof(Items));
        }
    }
    private void SetupDataUpdateTimer()
    {
        _dataUpdateTimer = new DispatcherTimer();
        _dataUpdateTimer.Tick += OnDataUpdateEvent;
        _dataUpdateTimer.Interval = TimeSpan.FromMilliseconds(10000);
        _dataUpdateTimer.Start();
    }
    private void OnDataUpdateEvent(object sender, EventArgs e)
    {
        this.Items = ... add or remove items
        // ...      
    }

当我以前只使用基本Timer时,我收到此错误:

System.InvalidOperationException
  HResult=0x80131509
  Message=The calling thread cannot access this object because a different thread owns it.
  Source=WindowsBase
  StackTrace:
   at System.Windows.Threading.Dispatcher.VerifyAccess()
   at System.Windows.DependencyObject.GetValue(DependencyProperty dp)
   at System.Windows.Controls.Primitives.Selector.get_SelectedValue()
   at ...
   at System.Timers.Timer.MyTimerCallback(Object state)