В проекте есть шаблон CollectionView, в нем описан DataTemplate элемента. Этот шаблон используется в нескольких View. Как забиндить для кнопки внутри DataTemplate команду, которая находится в нынешнем BindingContext для View, в котором CollectionView выводится?
Конкретно: в ResourceDictionary есть шаблон (ненужный контекст вырезал):
<Style TargetType="CollectionView" x:Key="FirstCollectionStyle">
<Setter Property="ItemTemplate">
<DataTemplate>
<Grid x:DataType="models:Song">
<ImageButton Command="{TemplateBinding BindingContext.PlayPushedCommand }" CommandParameter="{Binding .}"/>
...
</Grid>
</DataTemplate>
</Setter>
</Style>
В ViewModel:
public Command<Song> PlayPushedCommand { get => new Command<Song>(async (song) => await PlayPushed(song)); }
...
private Task<bool> PlayPushed(Song song)
{
...
}
Кроме конкретно этой вьюмодели есть и другие с такими же командами внутри. Вопрос в том, как мне обратиться из Command ImageButton к команде именно модели, которая является на данный момент контекстом. Ведь через TemplateBinding я получу доступ к контексту коллекции, к которой принадлежит этот элемент.
x:Referenceпоможет. тут 4-й пункт в статье – Pavel Popov Dec 05 '20 at 11:46System.Windows.Data.CollectionView. Лучше переименуйте свой класс, это меня и ввело в заблуждение в первом комментарии. – aepot Dec 05 '20 at 20:49BindingContext. – EvgeniyZ Dec 06 '20 at 19:34