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