ItemsControl
ユーザーがタブを閉じると、各項目 (タブ) が UI から削除されるカスタム(タブ付きドキュメント コンテナー) を作成しています。ItemsControl.Items
ただし、アイテムがデータバインドされている可能性があるため、コレクションから直接削除することはできません。だから私はそれをから削除する必要がありItemsSource
ます。これは何でもかまいません(、、ICollection
... )。DataTable
DataSourceProvider
私のアプリケーションのコンテキストでは、 の実際の型はわかっていますItemsSource
が、後で再利用できるように、そのコントロールをより一般的なものにしたいと考えています。
そのため、そのタイプを知らなくても、データ ソースからアイテムを削除する方法を探しています。リフレクションを使用できますが、汚れているように感じます...これまでのところ、私が思いついた最良の解決策は次を使用することdynamic
です:
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());
}
}
しかし、私はそれに満足していません。もっと良い方法があるに違いないと確信しています。任意の提案をいただければ幸いです!