각 항목 (탭)은 사용자가 닫을 때 UI에서 자신을 제거 할 수있는 사용자 정의 ItemsControl
을 작성하고 있습니다. 그러나 항목을 데이터 바인딩 할 수 있기 때문에 ItemsControl.Items
컬렉션에서 직접 제거 할 수는 없습니다. 그래서 나는 그것을 ItemsSource
에서 제거해야합니다. 어떤 것도 될 수 있습니다 (ICollection
, DataTable
, DataSourceProvider
...).WPF - ItemsSource에서 항목을 제거하는 가장 좋은 방법
내 응용 프로그램과 관련하여 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());
}
}
을하지만이 있어야 내가 확신 그것으로 정말 행복하지 않다 더 좋은 방법. 모든 제안을 부탁드립니다!
에서 직접 컨테이너를 제거, 좋은 디자인은'ItemsControl'이 전혀 보장하지 않을 것이다 'ItemsSource'에있는 타입에 대한 지식. –
해당 ItemsSource 속성을 완전히 제어 할 수 있다면 동의 하겠지만 그렇지는 않습니다. WPF의 일부이고,'object' 타입이며, 열거 형을 지원하는 어떤 것도 될 수 있습니다. 그리고 내 컨트롤은 어떤 것을 받아들이도록 고안되었으므로 특정 유형으로 제한하고 싶지 않습니다. –
왜 투표가 늦습니까? ?? – Noldorin