Что я обычно делаю, это привязываю элементы ItemsControl
к ICollectionView
(обычно ListCollectionView), а не напрямую к коллекции; Я думаю, что это то, что ItemsControl
делает по умолчанию (создает значение по умолчанию ICollectionView
), но я могу ошибаться.
В любом случае, это позволяет вам работать со свойством CurrentItem
ICollectionView
, которое автоматически синхронизируется с выбранным элементом в ItemsControl
(если свойство IsSynchronizedWithCurrentItem
элемента управления имеет значение true или null / дефолт). Затем, когда вам нужен текущий элемент в ViewModel, вы можете использовать его вместо этого. Вы также можете установить выбранный элемент, используя методы MoveCurrentTo...
в ICollectionView.
Но, перечитывая вопрос, я понимаю, что у вас может быть и другая проблема; у вас есть коллекция элементов по умолчанию, и вам нужен способ сопоставить их с конкретными экземплярами. Однако было бы плохой идеей переопределить операторы равенства объектов, чтобы считать их всегда равными, если они имеют один и тот же тип, поскольку это может сделать другой код очень запутанным. Я хотел бы рассмотреть возможность извлечения информации о типе в перечисление и поставить свойство только для чтения для каждого объекта, возвращающего одно из значений перечисления. Затем вы можете привязать элементы к коллекции значений перечисления, а выбранный элемент - к свойству перечисления каждого объекта.
Дайте мне знать, если вам нужен пример, я, возможно, напутал объяснение:)