У меня есть класс и набор IEnumerables, которые используют этот класс, чтобы дать мне список в списке. (Подробности см. в ответе на этот вопрос.)
Вот код:
public IEnumerable<IEnumerable<WorkItemColumn>> EnumerateResultSet(WorkItemCollection queryResults)//DisplayFieldList displayFieldList)
{
foreach (WorkItem workItem in queryResults)
{
yield return EnumerateColumns(queryResults.DisplayFields, workItem);
}
}
public IEnumerable<WorkItemColumn> EnumerateColumns(DisplayFieldList resultSet, WorkItem workItem)
{
foreach (FieldDefinition column in resultSet)
yield return new WorkItemColumn { Name = column.Name, Value = workItem[column.Name], WorkItemForColumn = workItem};
}
И класс:
public class WorkItemColumn
{
public string Name { get; set; }
public object Value { get; set; }
public WorkItem WorkItemForColumn { get; set; }
}
Я установил этот результат как ItemsSource для моего ListBox.
Form.QueryResultListSource = EnumerateResultSet(queryResults);
Проблема возникает, когда я пытаюсь поймать событие для этого списка:
public void QueryResultsSelectionChanged(SelectionChangedEventArgs e)
{
+-----------------+
v |
foreach (WorkItemColumn workItemColumn in e.AddedItems) |
{ |
AddWorkItemToPad(workItemColumn.WorkItemForColumn); |
} +---------------|
| |
v |
foreach (WorkItemColumn workItemColumn in e.RemovedItems) |
{ |
RemoveWorkItemFromPad(workItemColumn.WorkItemForColumn); |
} |
|
} |
|
These items are where the problem is --------------------------------+
Когда я проверяю e.AddedItems[0] во время отладки, он говорит, что его тип — EnumerateColumns.
Когда я пытаюсь привести к этому типу, Visual Studio говорит (по понятным причинам), что EnumerateColumns является методом, но используется как тип.
Итак, как я могу ссылаться на это по типу, чтобы я мог выполнить цикл foreach и получить содержимое внутри него?
Это был мой обновленный код, основанный на ответе:
public void QueryResultsSelectionChanged(SelectionChangedEventArgs e)
{
foreach (IEnumerable<WorkItemColumn> workItemColumns in e.AddedItems)
{
if (workItemColumns.Count() > 0)
AddWorkItemToPad(workItemColumns.First().WorkItemForColumn);
}
foreach (IEnumerable<WorkItemColumn> workItemColumns in e.RemovedItems)
{
if (workItemColumns.Count() > 0)
RemoveWorkItemFromPad(workItemColumns.First().WorkItemForColumn);
}
}