WPF数据模板中绑定事件不触发问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WPF数据模板中绑定事件不触发问题
今天⽐较闲,做⼀个练⼿的项⽬,结果在xaml中写了⼀个⽤户的数据模板后,在其中的某个Canvas上绑定了⼀个⿏标左击的事件,结果调试的时候,⽆论怎么点击都不跳到断点那⾥,百思不得其解。

之后尝试不绑定事件,直接采⽤内联事件的写法,将事件写在控件上,并且事件的处理写在cs代码⽽⾮ViewModel中,则可以使⽤,如此可以判断是采⽤MVVM时,命令没有成功绑定到事件上。

刚开始以为是DevExpress的MVVM框架的BUG。

后来改成⾃⼰⼿写的MVVM,并未解决问题,思考再三,觉得是数据模板并未获取到DataContext导致,于是将Canvas绑定的命令做了如下修改,将Canvas的数据上下⽂明确为最上层⽗节点的数据上下⽂,修改后问题解决,经过思考觉得是窗体资源不会被窗体的上下⽂所修饰,个⼈见解,并未验证。

修改前:
<Canvas Width="350" Height="80">
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand EventName="MouseLeftButtonDown"
Command="{Binding ClickChatWindowToSomeOne}"
PassEventArgsToCommand="True"/>
</dxmvvm:Interaction.Triggers>
<Image Width="60" Height="60" Canvas.Top="30" Canvas.Left="20">
<Image.Source>
<MultiBinding Converter="{StaticResource imageconveter}">
<Binding Path="headimg"/>
<Binding Path="sex"/>
</MultiBinding>
</Image.Source>
</Image>
<Canvas Background="LightPink">
<TextBlock Text="{Binding uname}" Canvas.Left="100" Canvas.Top="40" FontSize="15" Foreground="Black" FontWeight="Bold">
</TextBlock>
<TextBlock Text="{Binding describe}" Canvas.Left="100" Canvas.Top="70" FontSize="10" Foreground="Black"/>
<StackPanel Orientation="Horizontal" Canvas.Top="40" Canvas.Left="220">
<Image Source="image/location.png" Width="40" Height="40"/>
<TextBlock Text="{Binding lastlocal}" FontSize="10" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Canvas>
<Separator Margin="0, 5, 0, 5"/>
</Canvas>
修改后:{修改后的AncestorType是调⽤此数据模板的⽗节点}
<Canvas Width="350" Height="80">
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand EventName="MouseLeftButtonDown"
Command="{Binding DataContext.ClickChatWindowToSomeOne,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ItemsControl}}" PassEventArgsToCommand="True"/>
</dxmvvm:Interaction.Triggers>
<Image Width="60" Height="60" Canvas.Top="30" Canvas.Left="20">
<Image.Source>
<MultiBinding Converter="{StaticResource imageconveter}">
<Binding Path="headimg"/>
<Binding Path="sex"/>
</MultiBinding>
</Image.Source>
</Image>
<Canvas Background="LightPink">
<TextBlock Text="{Binding uname}" Canvas.Left="100" Canvas.Top="40" FontSize="15" Foreground="Black" FontWeight="Bold">
</TextBlock>
<TextBlock Text="{Binding describe}" Canvas.Left="100" Canvas.Top="70" FontSize="10" Foreground="Black"/>
<StackPanel Orientation="Horizontal" Canvas.Top="40" Canvas.Left="220">
<Image Source="image/location.png" Width="40" Height="40"/>
<TextBlock Text="{Binding lastlocal}" FontSize="10" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Canvas>
<Separator Margin="0, 5, 0, 5"/>
</Canvas>。

相关文档
最新文档