Когда вы говорите «как встроенные ListBox и DataGrid», насколько вы похожи?Вы просто имеете в виду широкие возможности для работы с источником, подобным списку, или вы имеете в виду все, что они могут сделать - генерацию элементов, виртуализацию, шаблонирование элементов, стилизацию контейнеров и т. Д.
Механизмв ItemsControl
, которая лежит в основе всей встроенной привязки списков в WPF, на удивление сложно, поэтому для воспроизведения потребуется огромное количество усилий.Хуже того, есть много мест, где другие биты WPF знают о ItemsControl
и имеют специальную обработку для него.(Например, ScrollViewer
и некоторые панели.) Поэтому даже невозможно создать собственную реализацию, которая делает то же самое, если вы также не напишите свои собственные замены для всех этих других частей.
ItemsControl
это одна из самых мощных функций WPF, но также и одна из наименее продуманных.По сути, если вам нужна его функциональность, вам, скорее всего, придется ее использовать.
Поэтому, если вы хотите, чтобы ваша UserControl
включала в себя ItemsControl
функциональность, вам нужно поместить внутри своего рода ItemsControl
ваш UserControl
и просто подключите свойства вашей коллекции к их ItemsSource
свойствам.Это может быть лучшим подходом, потому что вы получаете встроенную реализацию ItemsControl
, которая сделает всю работу за вас.
Но если вы только хотите воспроизвести некоторые специфические функции, вы могли бы справитьсясобытия изменения коллекции.Но я бы пошел по этому пути, только если вы исчерпали возможность заставить ItemsControl
сделать это для вас.