c# - 限制每秒绑定(bind)更新

标签 c# wpf mvvm

我目前正在创建一个程序,该程序读取通过 COM 端口发送的数据,然后将其实时绘制在图表中。数据显示使用 MVVM 原理,当数据以 10Hz 左右发送时,该原理可以正常工作。但是,正在读取数据的设备可以达到 1 kHz 的刷新率,这意味着每分钟 1000 个数据集。这适用于显示和更新简单的文本框,但它会破坏图表,因为更新速度太快。

我认为我现在需要做的是限制发送到订阅的类和页面的更新事件的数量,以便只发送有限数量的数据,从而使图表有机会正确绘制。 有没有办法自动限制这种情况,或者您建议进行哪些代码调整以手动进行限制?

我的收藏更改事件中的一小段代码:

void dataItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    NotifyPropertyChanged("dataItems");
    NotifyPropertyChanged("lastItem");

    // update any charts
    NotifyPropertyChanged("AccelXData");
    NotifyPropertyChanged("AccelYData");
    NotifyPropertyChanged("AccelZData");
}

// handle property changes
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
    var handler = this.PropertyChanged;
    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyName));
}

作为一个想法,每个数据集还有一个 ID,可用于检查何时手动更新。

最佳答案

更好的方法是在数据更改时删除对 NotifyPropertyChanged 的​​调用。

创建一个计时器并在计时器上刷新。这样您就可以控制刷新率,并且不受数据到达速率的限制。

关于c# - 限制每秒绑定(bind)更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22621372/

相关文章:

wpf - 如何隐藏控件以使其不再占用 WPF 中的空间?

c# - 无法更新数据网格并将更改保存到数据库

c# - 通过 MVVM 将 View 输出到另一个到另一个

c# - 如何在 .NET 中创建包含 'System' 的命名空间而不发生冲突?

c# - ServiceStack、CORS 和 OPTIONS(无 Access-Control-Allow-Origin header )

c# - 点击新窗口.xaml

c# - 如何通过单击按钮获取 Xamarin Forms 中的表单字段

c# - MVC 4 默认参数值

c# - 如何将字符串列表数据绑定(bind)到 WPF/WP7 中的 ListBox?

c# - WPF中如何实现双向数据绑定(bind)?