使用DataTemplate在ItemsControl中传递对象

时间:2017-10-23 12:31:38

标签: c# wpf datatemplate

所以基本上我有一个课程。

public class Step : INotifyPropertyChanged
{
    public int Index { get; set; }
    public int Time { get; set; }
}

在我的xaml中,我想使用一个DataTemplate和一个ItemsControl来表示Steps。我的DataTemplate看起来像这样:

<DataTemplate x:Key="StepTemplate" DataType="data:Step">
    <Label Content="{Binding Index}"/>
    <Label Content="{Binding Time}"/>
</DataTemplate>

我的ItemsControl看起来像这样。

<ItemsControl Name="ListSteps" ItemsSource="{Binding Steps}" Grid.IsSharedSizeScope="True" ItemTemplate="{StaticResource StepTemplate}" >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseLeftButtonDown">
            <i:InvokeCommandAction Command="{Binding Path=DataContext.StepClick, ElementName=ListSteps}" CommandParameter="{Binding}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ItemsControl>

几乎应该发生什么:每当我点击Step时,方法StepClick都会被调用,我点击的Step对象会作为参数传递

实际发生了什么:每当我点击Step时,方法StepClick都会被调用,但步骤对象不会作为参数传递,而是作为参数传递我的观点得到了传递。这根本不是我想要的。

每当我点击Step时,如何传递Step的对象?

1 个答案:

答案 0 :(得分:1)

将交互触发器移动到ItemTemplate

的根元素
<DataTemplate x:Key="StepTemplate" DataType="data:Step">
    <StackPanel Background="Transparent">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
                <i:InvokeCommandAction Command="{Binding Path=DataContext.StepClick, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
                                       CommandParameter="{Binding}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Label Content="{Binding Index}"/>
        <Label Content="{Binding Time}"/>
    </StackPanel>
</DataTemplate>