У меня есть ListView
, который получает свой Style
со статического ресурса. Например, у меня есть ObservableCollection
пользовательского объекта в моем MainWindowViewModel
. Этот объект содержит несколько свойств, включая MyCustomObjectProperty
. MainWindowViewModel
также имеет ICommand
, MyCommandOne
.«Заполнитель» Связывание в StaticResource
Мой стиль (с некоторыми куски вырезать, для простоты):
<Window.Resources>
<Style x:Key="MyListViewStyle" TargetType="ListView">
<!--(Removed extra Setters)-->
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Button Command="{Binding Path=DataContext.MyCommandOne,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
CommandParameter="{Binding Path=MyCustomObjectProperty}">
<Button.Template>
<!--(Styling)-->
</Button.Template>
</Button>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
Создание ListView
:
<ListView Grid.Column="1"
Grid.Row="1"
ItemsSource="{Binding Path=MyObservableCollection}"
Style="{StaticResource MyListViewStyle}"
Margin="5"
BorderThickness="0"
Background="LightGray"
/>
Этот код работает. Когда я нажимаю кнопку в ListView
, выполняется MyCommandOne
с параметром из пользовательского объекта, который представлен элементом просмотра списка кликов.
Мой вопрос здесь: есть ли способ заменить DataContext.MyCommandOne, RelativeSource...
каким-то заполнителем, поэтому я могу указать желаемую команду в разметке фактического ListView
? Таким образом, я могу создать больше ListView
с этим стилем, но выполняя разные команды.