以下是我的方案的一些代码片段。在.xaml方面,我有一个ItemsControl:
<ItemsControl ItemsSource="{Binding StatList}" ItemTemplate="{StaticResource statBox}"></ItemsControl>
StatList只是一个对象列表。
DataTemplate包含此TextBlock
<TextBlock x:Name="DataTextBlock" Background="Transparent" DockPanel.Dock="Top" HorizontalAlignment="Center"
Foreground="White" FontSize="11">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<iBehaviors:InvokeMethodTrigger Method="UpdateBinding"
Target="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"
Parameter="{Binding ., RelativeSource={RelativeSource AncestorType=TextBlock}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
这是我第一次在ViewModel上设置StatList时,TextBlock本身作为参数传递给InvokeMethodTrigger。但是,如果我在viewmodel上更改StatList,则下次Loaded事件发生时,当触发InvokeMethodTrigger时,Parameter为null。
奇怪的是,当我将参数绑定更改为:
时Parameter="{Binding ElementName=DataTextBlock}"
当我更改我的StatList时,它第二次工作,TextBlock作为参数传递。我的生活无法弄明白为什么!有什么解释吗?
答案 0 :(得分:-1)
你可以在后面的代码中这样做:
SlatList slat = new SlatList();
ItemControl.ItemSource = slat;
ItemControl.DataContext = slat;
确保指定itemcontrol的名称并替换&#34; ItemControl&#34;这个名字。
在XAML中:
<ItemsControl ItemsSource="{Binding StatList}" DataContext="{Binding SlatList} ItemTemplate="{StaticResource statBox}"> </ItemsControl>