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!

questionAnswers(4)

yourAnswerToTheQuestion