WPF - Melhor maneira de remover um item do ItemsSource
Estou escrevendo um costumeItemsControl
(um contêiner de documento com guias), em que cada item (guia) pode se remover da interface do usuário quando o usuário o fecha. No entanto, não consigo removê-lo diretamente doItemsControl.Items
coleção, porque os itens podem ser vinculados. Então eu tenho que removê-lo doItemsSource
, que pode ser qualquer coisa (ICollection
, DataTable
, DataSourceProvider
...)
No contexto do meu aplicativo, eu sei qual é o tipo real doItemsSource
será, mas quero que esse controle seja mais genérico para poder reutilizá-lo mais tarde.
Então, estou procurando uma maneira de remover um item de uma fonte de dados, sem conhecer seu tipo. Eu poderia usar a reflexão, mas parece suja ... Até agora, a melhor solução que encontrei é usardynamic
:
internal void CloseTab(TabDocumentContainerItem tabDocumentContainerItem)
{
// TODO prompt user for confirmation (CancelEventHandler ?)
var item = ItemContainerGenerator.ItemFromContainer(tabDocumentContainerItem);
// TODO find a better way...
try
{
dynamic items = ItemsSource;
dynamic it = item;
items.Remove(it);
}
catch(RuntimeBinderException ex)
{
Trace.TraceError("Oops... " + ex.ToString());
}
}
Mas não estou muito feliz com isso, tenho certeza de que deve haver uma maneira melhor. Todas as sugestões serão apreciadas!