如何在不覆盖旧项的情况下向DataGrid添加新项
本文关键字:情况下 DataGrid 添加 新项 覆盖 | 更新日期: 2023-09-27 17:58:57
我知道没有Append
,但我相信这是正确的调用方式(对吗?)。
现在我有一个ObservableCollection
,我用它向我的DataGrid
添加新项目。它很好,但如果我一次添加10个项目,第二次添加15个项目,我最终会得到15个项目而不是25个。基本上,集合会覆盖旧集合上的每个集合。
我可以循环浏览旧集合,并在包含新集合后再次添加它,但这似乎是一件非常愚蠢的事情。我相信必须有另一种方法来做到这一点。
下面是我的类和里面的集合的样子(我使用了这里的代码):
public class ProxiesList
{
public string proxy { get; set; }
public string proxySource { get; set; }
public bool proxyUsed { get; set; }
public bool toUse { get; set; }
public string working { get; set; }
ObservableCollection<ProxiesList> GridItems = new ObservableCollection<ProxiesList>();
public ObservableCollection<ProxiesList> _GridItems
{
get
{
return GridItems;
}
}
public void addTheData(MainWindow mw, List<string> proxyList)
{
foreach (string line in proxyList)
{
_GridItems.Add(new ProxiesList //add items to the collection
{
proxy = line.Split(';')[0],
proxySource = line.Split(';')[1],
proxyUsed = false,
toUse = true,
working = "n/a"
});
}
mw.dataGrid1.ItemsSource = GridItems; //bind the collection to the dataGrid1
GridItems = new ObservableCollection<ProxiesList>(); //create new instance of the observable collection
}
}
ObservableCollection在添加、删除项目或刷新整个列表时提供通知。因此,您只需要将您的项目附加到数据网格绑定到的ObservableCollection<ProxiesList>
的同一实例中。
因此,基本上,您可以将mw.dataGrid1.ItemsSource
设置为ObservableCollection<ProxiesList>
,也可以在Xaml中使用Binding
。
您不需要每次添加项目时都设置mw.dataGrid1.ItemsSource
。
GridItems = new ObservableCollection<ProxiesList>(); //create new instance of the observable collection
这一行导致了您的问题,因为它创建了集合的一个新实例,所以每次您将项目添加到ObservableCollection<ProxiesList>
的新实例中时,这意味着它只包含您刚刚添加的项目。
因此,只需从public void addTheData(MainWindow mw, List<string> proxyList)
中删除以下行即可
mw.dataGrid1.ItemsSource = GridItems; //bind the collection to the dataGrid1
GridItems = new ObservableCollection<ProxiesList>(); //create new instance of the observable collection
如果将ProxiesList
设置为DataContext
,则可以将Xaml中的DataGrid.ItemsSource
绑定到_GridItems
属性。
其他事情,比如你的属性命名,最好遵循C#命名约定。
ObservableCollection
内置了一种机制,每当项目添加到集合或从集合中删除时,都会通知UI(在本例中为DataGrid
)。
因此,实例化ObservableCollection
并设置DataGrid
的ItemsSource
一次就足够了。例如,您可以在构造函数中执行此操作。剩下的就是简单地将新项目添加到现有集合中:
public ProxiesList()
{
GridItems = new ObservableCollection<ProxiesList>();
mw.dataGrid1.ItemsSource = GridItems;
}
public void addTheData(MainWindow mw, List<string> proxyList)
{
foreach (string line in proxyList)
{
GridItems.Add(new ProxiesList //add items to the collection
{
proxy = line.Split(';')[0],
proxySource = line.Split(';')[1],
proxyUsed = false,
toUse = true,
working = "n/a"
});
}
}
我看不出在这里保留_GridItems
的好处,所以你可以删除它。