我希望我的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());
}
}
有人可以指出我正确的方向来实施此更新功能吗?任何建议都将不胜感激。
答案 0 :(得分:2)
您需要管理流程。它在概念上很容易,但根据需要处理多少数据,它可能会很快变慢。步骤
创建一个专门的令牌类,该类实现到INotifyPropertyChanged
。
让ObservableCollection
持有#1中的课程项目。添加或删除项目时,可观察集合会通知ListBox。这将允许您的代码一次添加一个项目。 (解决1个问题)
要解决下一个数据更改问题:在#1中的类上有一个名为Text
的属性,它将保存数据,提供属性更改通知。
在列表框中绑定到在步骤1中创建的项目列表,并指定绑定到Text
。使用列表框的数据模板将允许您绑定到列表实例的Text
属性。
提供启发式/智能读取传入数据并在步骤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}}