今天比较闲,做一个练手的项目,结果在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. Consul集群Server模式

    Consul集群Server模式 架构示意图 Consul在生产环境下运行模式分为两种:Server模式和Client模式(dev模式属于开发模式不在这里讨论),我们先用Server模式搭建一个Con ...

  2. [BZOJ 3731] Gty的超级妹子树 (树分块)

    [BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值.现在有四种操作 1.查询x子树里>y的值有多少个 2.把点x的值改成y 3.添加一个新节点, ...

  3. SCUT - 11 - 被钦定的选手 - 质因数分解

    https://scut.online/p/11 T了好多次,还想用mutimap暴力分解每个数的质因数.后来记录每个数的最小质因子过了. #include <bits/stdc++.h> ...

  4. Vue组件通信方式(一)

    组件与组件的关系,通常有父子关系,兄弟关系以及隔代关系. 针对不同的场景,如何选用适合的通信方式呢? (一) props/$emit parentComponent ==> childCompo ...

  5. Photoshop制作Android UI:怎样从大图片中准确剪切出圆角正方形 图片

    如题所看到的,最初我是直接用PS的剪切工具,但发现有时不太好用. 由于你必须提前设好要剪切的尺寸. 也可能是我这小白不知道咋用. 下为摸索到的最好方法: 1.打开原图.新建图层,假设是png图片就不用 ...

  6. 15、前端知识点--MVVM

    MVVM模式的理解 MVVM模式里面,核心是数据. 各种前端框架,最核心的说就是保持了数据与视图的同步. 数据驱动思想:数据驱动视图. Vue不建议手动操作DOM. 以前是指令操作DOM,其实本质上底 ...

  7. element 弹框关闭报错

    <template> <el-container style="padding: 00px 20px 0px 20px"> <el-dialog ti ...

  8. C# 列出并删除一个文件夹下的所有MD5值相同的文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. NLP 自然语言处理之综述

    (1) NLP 介绍 NLP 是什么? NLP (Natural Language Processing) 自然语言处理,是计算机科学.人工智能和语言学的交叉学科,目的是让计算机处理或"理解 ...

  10. Ansible自动化运维工具(2)

    (5) ping模块 检测客户端机器的连通性 ansible webserver -m ping (6) group模块 创建用户的附加组. ansible webserver -m group -a ...