WPF嵌套itemscontrol EventToCommand绑定路径错误

时间:2015-04-30 12:06:54

标签: wpf mvvm binding nested itemscontrol

我在itemscontrol中的WPF绑定有问题。发生以下错误

  

System.Windows.Data错误:40:BindingExpression路径错误:'object'''RelativeSource'(HashCode = 56697999)'上找不到'MovieImageClick'属性。 BindingExpression:路径= MovieImageClick; DataItem ='RelativeSource'(HashCode = 56697999); target元素是'EventToCommand'(HashCode = 42916613); target属性是'Command'(类型'ICommand')

XAML的一个简单示例:

<ItemsControl x:Name="movie_poster_grid" ItemsSource="{Binding Mode=TwoWay, Path=AllMovies}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <WrapPanel Orientation="Horizontal"/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <Image Source="{Binding ImageURL}" Stretch="UniformToFill" Width="200" Height="300">
            <i:Interaction.Triggers>
               <i:EventTrigger EventName="MouseDown">
                  <cmd:EventToCommand Command="{Binding MovieImageClick , RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}}" PassEventArgsToCommand="True"/>
               </i:EventTrigger>
            </i:Interaction.Triggers>
         </Image>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

我有一个MVVM框架,并通过以下方式将datacontext连接到ModernUserControl:

DataContext="{Binding MovieListModel, Source={StaticResource Locator}}"

在这个viewmodel里面是一个Relaycommand MovieImageClick我希望将触发器连接到。

情况: 如果我将触发器直接放在itemscontrol中,它将起作用!如果我将触发器放在itemscontrol中更深处,它就不起作用。所以我认为问题在于在itemscontrol中找到viewmodel。奇怪的是,触发器可以找到itemscontrol但无法找到命令或其他东西。请帮帮我!

1 个答案:

答案 0 :(得分:3)

您绑定到ItemsControl但是您需要ItemsControl的DataContext。试试这个:

<cmd:EventToCommand Command="{Binding Path=DataContext.MovieImageClick, RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}}" PassEventArgsToCommand="True"/>