Поддержание 60 элементов в наблюдаемой коллекции - PullRequest
1 голос
/ 13 октября 2011

Привет. У меня есть ObservableCollection, получающая данные каждую минуту. Когда наступит час, я хотел бы очистить первый элемент и переместить все элементы вверх, а затем добавить новый элемент, сохранив его таким образом на уровне 60 элементов. У кого-нибудь есть идеи, как это сделать?

Вот мой код:

public class MainWindow : Window
{            
    double i = 0;
    double SolarCellPower = 0;
    DispatcherTimer timer = new DispatcherTimer();
    ObservableCollection<KeyValuePair<double, double>> Power = new ObservableCollection<KeyValuePair<double, double>>();

    public MainWindow()
    {
        InitializeComponent();

        timer.Interval = new TimeSpan(0, 0, 1);  // per 5 seconds, you could change it
        timer.Tick += new EventHandler(timer_Tick);
        timer.IsEnabled = true;
    }

    void timer_Tick(object sender, EventArgs e)
    {
        SolarCellPower = double.Parse(textBox18.Text);
        Power.Add(new KeyValuePair<double, double>(i, SolarCellPower ));
        i += 5;
        Solar.ItemsSource = Power;
    }
}

1 Ответ

1 голос
/ 13 октября 2011

Просто посчитайте элементы в вашем списке и удалите верхний элемент, если количество равно 60. Затем вставьте новый элемент, как обычно.

if (Power.Count == 60)
    Power.RemoveAt(0);

Power.Add(new KeyValuePair<double, double>(i, SolarCellPower ));

Также, если вы связываете свой ItemsSource вместо его установки, онобновится автоматически при изменении коллекции.

...