使用新的COM端口数据更新ListBox

时间:2017-03-21 00:42:48

标签: c# wpf listbox

我希望我的ListBox能够使用新值更新旧值,而不是简单地向ListBox添加越来越多的行,就像现在一样。但是,我不确定在哪里可以实现可以处理这个问题的东西。

我目前的代码如下:

private void DisplayText(string rawData)
{
    textArduinoData.Text = rawData;
    string[] sortedData = rawData.Split(';');

    for (int i = 0; i < sortedData.Length; i++)
    {
        listPortData.Items.Add(sortedData[i].ToString());

    }
}

有人可以指出我正确的方向来实施此更新功能吗?任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您需要管理流程。它在概念上很容易,但根据需要处理多少数据,它可能会很快变慢。步骤

  1. 创建一个专门的令牌类,该类实现到INotifyPropertyChanged

  2. ObservableCollection持有#1中的课程项目。添加或删除项目时,可观察集合会通知ListBox。这将允许您的代码一次添加一个项目。 (解决1个问题

  3. 要解决下一个数据更改问题:在#1中的类上有一个名为Text的属性,它将保存数据,提供属性更改通知。

  4. 在列表框中绑定到在步骤1中创建的项目列表,并指定绑定到Text。使用列表框的数据模板将允许您绑定到列表实例的Text属性。

  5. 提供启发式/智能读取传入数据并在步骤2中的可观察集合中查找关联数据。找到后将现有数据的Text属性更改为新的绑定列表项将相应更改。

答案 1 :(得分:0)

您可以使用ListBox方法检查string是否包含IndexOf,然后更新现有string(或根本不执行任何操作)或添加新的-1是否获得了默认值private void DisplayText(string rawData) { textArduinoData.Text = rawData; string[] sortedData = rawData.Split(';'); int index; for (int i = 0; i < sortedData.Length; i++) { if ((index = listPortData.Items.IndexOf(sortedData[i])) == -1) { listPortData.Items.Add(sortedData[i]); } } } 以外的索引:

{{1}}