WPF ListBoxItem DataTempldate command 执行问题

今天用到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>

 

 

转载于:https://www.cnblogs.com/xcong/p/3428595.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值