Я искал, как сделать что-то подобное в WPF, и я получил это решение:
<ItemsControl ItemsSource="{Binding MyItems,Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton
Content="{Binding}"
Command="{Binding Path=DataContext.CustomCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ItemsControl}} }"
CommandParameter="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
Надеюсь, это сработает для кого-то другого. У меня есть контекст данных, который автоматически устанавливается в ItemsControls, и этот контекст данных имеет два свойства: MyItems
, который представляет собой коллекцию, и одну команду «CustomCommand». Из-за ItemTemplate
используется DataTemplate
, DataContext
верхних уровней недоступен напрямую. Тогда обходной путь для получения DC родителя использует относительный путь и фильтр по типу ItemsControl
.