如何每1分钟自动在WPF上刷新Datagrid?

时间:2011-05-19 08:55:34

标签: c# wpf datagrid refresh

我希望能够刷新我的数据网格,因为我正在更新数据库数据网格中的表格并希望看到网格中的更改,是否有任何方法可以每1分钟自动更新数据网格?

3 个答案:

答案 0 :(得分:10)

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

Here是一个实现计时器来更新ListBox的示例,您可以根据自己的需要调整它。

答案 1 :(得分:3)

展望未来,您可以使用ObservableCollection绑定网格,以避免手动刷新。

答案 2 :(得分:0)

我最终使用了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)