所以基本上我有一个课程。
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
的对象?
答案 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>