今天比较闲,做一个练手的项目,结果在xaml中写了一个用户的数据模板后,在其中的某个Canvas上绑定了一个鼠标左击的事件,结果调试的时候,无论怎么点击都不跳到断点那里,百思不得其解。

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

刚开始以为是DevExpress的MVVM框架的BUG。后来改成自己手写的MVVM,并未解决问题,思考再三,觉得是数据模板并未获取到DataContext导致,于是将Canvas绑定的命令做了如下修改,将Canvas的数据上下文明确为最上层父节点的数据上下文,修改后问题解决,经过思考觉得是窗体资源不会被窗体的上下文所修饰,个人见解,并未验证。

修改前:

<Canvas Width="" Height="">
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand EventName="MouseLeftButtonDown"
Command="{Binding ClickChatWindowToSomeOne}"
PassEventArgsToCommand="True"/>
</dxmvvm:Interaction.Triggers>
<Image Width="" Height="" Canvas.Top="" Canvas.Left="">
<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="" Canvas.Top="" FontSize="" Foreground="Black" FontWeight="Bold">
</TextBlock>
<TextBlock Text="{Binding describe}" Canvas.Left="" Canvas.Top="" FontSize="" Foreground="Black"/>
<StackPanel Orientation="Horizontal" Canvas.Top="" Canvas.Left="">
<Image Source="image/location.png" Width="" Height=""/>
<TextBlock Text="{Binding lastlocal}" FontSize="" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Canvas>
<Separator Margin="0, 5, 0, 5"/>
</Canvas>

修改后:{修改后的AncestorType是调用此数据模板的父节点}

<Canvas Width="" Height="">
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand EventName="MouseLeftButtonDown"
Command="{Binding DataContext.ClickChatWindowToSomeOne,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ItemsControl}}"
PassEventArgsToCommand="True"/>
</dxmvvm:Interaction.Triggers>
<Image Width="" Height="" Canvas.Top="" Canvas.Left="">
<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="" Canvas.Top="" FontSize="" Foreground="Black" FontWeight="Bold">
</TextBlock>
<TextBlock Text="{Binding describe}" Canvas.Left="" Canvas.Top="" FontSize="" Foreground="Black"/>
<StackPanel Orientation="Horizontal" Canvas.Top="" Canvas.Left="">
<Image Source="image/location.png" Width="" Height=""/>
<TextBlock Text="{Binding lastlocal}" FontSize="" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Canvas>
<Separator Margin="0, 5, 0, 5"/>
</Canvas>

  

WPF数据模板中绑定事件不触发问题的更多相关文章

  1. WPF ListBoxItem模板中添加CheckBox选中问题

    原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...

  2. ListBox项模板中绑定ListBoxItem属性的方法

    原文:ListBox项模板中绑定ListBoxItem属性的方法 <ListBox> <ListBox.ItemTemplate> <DataTemplate> & ...

  3. WPF数据模板(7)

    数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...

  4. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  5. WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension

    问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...

  6. jQuery中绑定事件bind() on() live() one()的异同

    jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件 bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也 ...

  7. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  8. WPF数据模板和控件模板

     WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...

  9. JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数

    下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...

随机推荐

  1. mysql续集(查询部分)

    mysql查询部分,从基础的查询到关键字,where子句,group by, order by, limit ,having,子查询分为from子查询和where子查询,左连接和右连接,内连接的连表查 ...

  2. JAVA总结--java数据类型

    一.String 1.String定义是指向堆内存中的引用:String的赋值本身是引用对象的切换,切换前后的对象依然存在:源码为:private final char value[]: 2.对多个S ...

  3. SCAU 2015 GDCPC team_training0

    A.题目:http://acm.timus.ru/problem.aspx?space=1&num=2024 题意:求一个包含K个不同字符的集合的最大长度,还有组成这个长度的集合的个数 做法: ...

  4. spark复习笔记(3):使用spark实现单词统计

    wordcount是spark入门级的demo,不难但是很有趣.接下来我用命令行.scala.Java和python这三种语言来实现单词统计. 一.使用命令行实现单词的统计 1.首先touch一个a. ...

  5. Win10系统下插入耳机前面板无声后面板有声的处理

    问题描述: 当耳机插入后面板绿色口(注意:耳机扬声器为绿色口,红色为话筒麦克风:前后面板一样):可以听到声音,但是转到前面板插入后,无声音:调出声音面板发现声音可随音度波动 处理步骤: 1.保证插牢接 ...

  6. Sql在Group by的select中包含多列

    SELECT A , B , COUNT(Id) AS '数量' FROM dbo.[Table] GROUP BY A , B

  7. Taro -- 上传图片公用组件

    Taro上传图片公用组件 子组件chooseImage //component/chooseImage/index.js import Taro, { Component } from '@taroj ...

  8. generator (1)

    function array () { console.log(arguments) }; array(1,2,3) 从这里我们可以看出 数组的迭代方法里面有一个 属性  [Symbol.iterat ...

  9. Django组件---Django请求生命周期和中间件

    Django组件---Django请求生命周期和中间件 Django请求生命周期 说明: client代表浏览器,浏览器的内部为我们封装了socket,Django的WSGI模块也为我们封装了sock ...

  10. struts2+ajax 前后端传值

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...