应用程序在CAN总线上读取和写入CAN消息。
我想以两种特定模式将项目添加到我的listView中。一种模式是静态模式。具有新标识符的任何项目都将以数字顺序插入列表。标识符与现有项目匹配的任何项目都将替换现有项目。列表的大小与唯一标识符的数量相同。
另一个模式正在滚动。最新消息将始终显示在列表视图的顶部。
此刻,我直接添加到列表视图
ListView.Items.insert(0, item)
或
ListView.Items[index] = item
问题是,当消息的频率变得很高时,新消息的绘制将无法跟上。我希望以某种合理的刷新率更新图纸。
我读过将项目直接添加到列表视图不是使用wpf的最佳方法,但是我添加项目的特定模式将我带到了这条路。
滚动模式
private void scrollMessage(DisplayCANMessage receivedMessage)
{
receivedMessage.Count = ((DisplayCANMessage)ListViewCANmessages.Items[0]).Count + 1;
Dispatcher.Invoke(() =>
{
ListViewCANmessages.Items.Insert(0, receivedMessage);
});
}
静态模式
private void staticMessage(DisplayCANMessage receivedMessage, List<DisplayCANMessage> messageList)
{
int index = messageList.BinarySearch(receivedMessage);
if (index < 0)
messageList.Insert(~index, receivedMessage);
else
messageList[index] = receivedMessage;
Dispatcher.Invoke(() =>
{
if (index >= 0)
{
DisplayCANMessage existingMessage = (DisplayCANMessage)ListViewCANmessages.Items[index];
receivedMessage = receivedMessage.calculateStaticCountAndTimeInterval(existingMessage);
ListViewCANmessages.Items[index] = receivedMessage;
}
else
{
if (~index == ListViewCANmessages.Items.Count)
{
receivedMessage.Count++;
ListViewCANmessages.Items.Add(receivedMessage);
}
else
{
receivedMessage.Count++;
ListViewCANmessages.Items.Insert(~index, receivedMessage);
}
}
});
}