如何将Command添加到ListBox.ItemTemplate

时间:2013-04-10 14:46:13

标签: xaml binding command

我有一个使用MVVM的WPF应用程序。

此代码来自我的ResourceDictionary.xaml

  <DataTemplate x:Key="LogListTemplate">
        <ListBox ItemsSource="{Binding LogList, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource HorizontalListBoxItem}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Style="{StaticResource ErrorBorders}">
                        <StackPanel ToolTip="{Binding Details}" Width="250">
                            <TextBlock Text="{Binding Title}" />
                            <TextBlock Text="{Binding Details}" TextWrapping="Wrap" />
                            <Button Command="{Binding AddToTempDtdFileCommand}" CommandParameter="{Binding Details}" Content="Ignore" />
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </DataTemplate>

当我点击Button时,命令不会执行。测试确认这是因为我的Button位于ListBox中。

我的问题是我无法将我的按钮移出ListBox,原因有两个。

1. Asthetics/UI (the button has belong with the information)  
2. Binding to the LogList is done from within the ListBox.ItemTemplate  

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

如果在ViewModel中定义了该命令,则可以使用RelativeSource与该命令联系。 RelativeSource可以找到一个祖先(这是您的View),因此您可以使用其DataContext(您的ViewModel)。

<Button Command="{Binding DataContext.AddToTempDtdFileCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClass}}}" CommandParameter="{Binding Details}" Content="Ignore" />