您的位置:首页 > 其它

WPF ListBoxItem DataTempldate command 执行问题

2013-11-17 23:53 381 查看
今天用到MVVM,在listboxItem中做command处理。因为是要获取数据,修改ListBox模板,但是发现command无法正确执行,写在Item中可以正确执行。

网上也遇到类似问题,但是没有对应的解决办法。最后由@WaitingEver 给予解决。

主要用到RelativeSource,RelativeSource属性可以根据相对于目标的关系指向源对象。通常用于目标对象和源对象不在同一个标记块中,当创建控件模板和数据模板会出现这种情况。用到RelativeSource访问顶级ListBox控件去读取相应的属性。

出错代码:

<ListBox.ItemTemplate>
<DataTemplate>
<Image Margin="5" Source="{Binding}" Width="140" Height="90" Stretch="Fill">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
                  <i:InvokeCommandAction Command="{Binding ChangeBackGround}" CommandParameter="" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
          </Image>
      </DataTemplate>
</ListBox.ItemTemplate>


修正后代码:

<ListBox.ItemTemplate>
<DataTemplate>
<Image Margin="5" Source="{Binding}" Width="140" Height="90" Stretch="Fill">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<i:InvokeCommandAction Command="{Binding Path=DataContext.ChangeBackGround,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListBox}}" CommandParameter="" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: