WPF我的列表有问题<;T>;
本文关键字:gt 我的 lt 有问题 WPF 列表 | 更新日期: 2023-09-27 18:20:13
这是我的函数。
public List<DiseaseSymptomParams> GetSelectedDiseaseSymptom()
{
var entiParams = new DiseaseSymptomParams();
var selectedDiseases = new List<DiseaseSymptomParams>();
try
{
foreach (DiseaseSymptom itemSelected in DiseaseSymptomsDataGrid.ItemsSource)
{
var cellContent = (CheckBox)StatusIdColumn.GetCellContent(itemSelected);
if (cellContent != null && cellContent.IsChecked == true)
{
entiParams.Id = DefaultValue.GetInt(itemSelected.Id);
selectedDiseases.Add(entiParams);
}
}
}
catch (Exception)
{
}
return selectedDiseases;
}
显然,如果我选择了2个或多个项目(使用复选框),所有复选框都将添加到selectedDiseases
中,但最后添加的复选框将覆盖列表中的所有条目。
您只有一个entiParams
的副本,您可以不断修改并重新添加到列表中。将对象的创建放在循环中,这样您就可以创建新的对象,而不是修改旧的对象。
foreach (DiseaseSymptom itemSelected in DiseaseSymptomsDataGrid.ItemsSource)
{
var cellContent = (CheckBox)StatusIdColumn.GetCellContent(itemSelected);
if (cellContent != null && cellContent.IsChecked == true)
{
var entiParams = new DiseaseSymptomParams();
entiParams.Id = DefaultValue.GetInt(itemSelected.Id);
selectedDiseases.Add(entiParams);
}
}
entiParams是一个引用类型,列表selectedDiseases不断添加相同的实例。改为:
public List<DiseaseSymptomParams> GetSelectedDiseaseSymptom()
{
var selectedDiseases = new List<DiseaseSymptomParams>();
try
{
foreach (DiseaseSymptom itemSelected in DiseaseSymptomsDataGrid.ItemsSource)
{
var cellContent = (CheckBox)StatusIdColumn.GetCellContent(itemSelected);
if (cellContent != null && cellContent.IsChecked == true)
{
var entiParams = new DiseaseSymptomParams
{
Id = DefaultValue.GetInt(itemSelected.Id)
};
selectedDiseases.Add(entiParams);
}
}
}
catch (Exception)
{
}
return selectedDiseases;
}