У меня есть следующие ViewModel: RecordViewModel, ComponentViewModel, где RecordViewModel, по сути, является контейнером для нескольких ComponentViewModel.
Отображение этих ViewModels в настоящее время обрабатывается шаблонами данных, которые выглядят примерно так:
<DataTemplate DataType="{x:Type vm:RecordViewModel}" >
<ItemsControl ItemsSource={Binding Components} />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ComponentViewModel}" >
<TextBox Text={Binding Name} />
</DataTemplate>
Теперь я хотел предоставить способ изменить порядок отображения ComponentViewModel и удалить определенную ComponentViewModel из списка. Я начал с этого, манипулируя DataTemplate в ComponentViewModel и добавляя кнопки, которые обеспечивали эти функции (щелчок затем вызывал бы метод на ComponentViewModel, который (через ссылку «Parent» на RecordViewModel) вызывал метод на RecordViewModel для выполнить операцию (например, component.Parent.DeleteComponent (this)).
Проблема с этим, по моему мнению, заключается в том, что на самом деле именно Запись должна манипулировать позицией Компонентов / удалять Компонент, а не сам Компонент.
Итак, я подумал об использовании рекламного элемента, который присоединяется к RecordViewModel и отображает кнопки для обеспечения функциональности (удаление, перемещение вверх, перемещение вниз) для каждой из ComponentViewModel.
Проблема, однако, заключается в том, что этим украшениям нужно брать ссылку на производный элемент управления, который они украшают (что было нормально, я просто связал бы их с ItemsControl в Record-DataTemplate), однако проблема возникает, когда я хочу показать кнопки в правильном положении для каждой ComponentViewModel. У меня есть только ссылка на данные ComponentViewModels, а не на их визуальное представление (вещь, определенная в DataTemplate), поэтому у меня нет возможности узнать, где разместить 3 кнопки.
Есть ли способ обойти это? Или возможно, что для этих требований использование ViewModels / DataTemplates просто не очень хорошая идея, и поэтому мне следует использовать Control-производные / ControlTemplates?
Заранее спасибо!