在使用具有ItemsSource的ItemsControl时,我在UserControl内部进行数据绑定时遇到了一些麻烦。我的Eventtrigger永远不会被调用。
我认为问题在于,当我在行中调用我的eventtrigger时:
<cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />
它试图在CheckBoxes集合中找到已检查的事件,因为我已经设置了我的ItemsSource,而它应该在其父级中查找。我一直在寻找解决方案,但是它们似乎都没有用。
我的代码如下所示:
<Grid x:Name="layoutroot">
<ItemsControl x:Name="itemcontrol" ItemsSource="{Binding CheckBoxes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<s:SurfaceCheckBox Background="White" Foreground="White">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</s:SurfaceCheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
当我尝试以下代码时,它完全按预期工作:
<Grid x:Name="layoutroot">
<s:SurfaceCheckBox Background="White" Foreground="White" Content="{Binding Content}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<cmd:EventToCommand Command="{Binding ElementName=layoutroot, Path=DataContext.Checked}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</s:SurfaceCheckBox>
</Grid>
但是我确实需要在带有ItemsSource的itemControl中使用此行为。
有什么想法吗?
答案 0 :(得分:1)
ItemsControl
内部的绑定放在集合中的当前项目上。你需要做的是寻找父母,并从那里结束。
在ItemsControl
内试一试,替换MyUserControlName
:
<cmd:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyUserControlName} }, Path=DataContext.Checked}" />