2014-10-01 2 views
0

У меня есть 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 с этим стилем, но выполняя разные команды.

ответ

1

Обход - Установите Tag из ListView фактической команды, а затем привязать к Tag свойство ListView от Button.

<DataTemplate> 
    <Button Command="{Binding Tag, RelativeSource={RelativeSource FindAncestor, 
            AncestorType=ListView}}"/> 
    ........ 
</DataTemplate> 

и ListView:

<ListView Tag="{Binding MyCommandOne}"/> 
Смежные вопросы