WPF数据模板中绑定事件不触发问题
今天比较闲,做一个练手的项目,结果在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数据模板中绑定事件不触发问题的更多相关文章
- WPF ListBoxItem模板中添加CheckBox选中问题
原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...
- ListBox项模板中绑定ListBoxItem属性的方法
原文:ListBox项模板中绑定ListBoxItem属性的方法 <ListBox> <ListBox.ItemTemplate> <DataTemplate> & ...
- WPF数据模板(7)
数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...
- JQuery在循环中绑定事件的问题详解
JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...
- WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension
问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...
- jQuery中绑定事件bind() on() live() one()的异同
jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件 bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也 ...
- jQuery中绑定事件的几种方法
以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){}); (2)target.bind("click",functi ...
- WPF数据模板和控件模板
WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...
- JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...
随机推荐
- java 泛型的内部原理:类型擦除以及类型擦除带来的问题
一.Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(ty ...
- git ssh key配置&解决git每次输入密码
git ssh key配置&解决git每次输入密码:https://blog.csdn.net/qq_42817227/article/details/81415404
- H5白屏问题
前言 前阵子弄了灰度环境,H5这边需要给灰度环境的接口加上Cookie,配置的期间遇到一些Cookie问题以及白屏在此记录下 1.H5请求接口带不上Cookie 解决方法:前端使用了 webpack ...
- ftp服务端
#coding=utf-8 import SocketServer import json import os class MyTcpHandler(SocketServer.BaseRequestH ...
- Java解析XML介绍
开发十年,就只剩下这套架构体系了! >>> XML解析器提供了访问或修改用来表示数据的xml文件的能力.Java中提供了多种方式来解析xml文件. 主要分为两类,包括解析XML文 ...
- call apply bind的使用方法和区别
call 1.改变this指向 2.执行函数 3.传参 var obj={}; function fun(a,b){ console.log(a,b,this); } fun(1,2); / ...
- WPF自定义样式篇-DataGrid
WPF自定义样式篇-DataGrid 先上效果图: 样式: <!--DataGrid样式--> <Style TargetType="DataGrid"& ...
- Java JNA (四)—— void**、void*、char**、char*、int*等类型映射关系及简单示例
ByReference类有很多子类,这些类都非常有用. ByteByReference.DoubleByReference.FloatByReference. IntByReference.LongB ...
- qemu-kvm使用
创建镜像qemu-img create -f qcow2 test-vm.qcow2 10g 修改镜像大小qemu-img resize test-vm.qcow2 +10G 安装系统 qem ...
- Docker实战部署应用——Redis
Redis 部署 拉取Redis镜像 docker pull redis 创建Redis容器 docker run -id --name=sun_redis -p 6379:6379 redis 客户 ...