打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
陌上青青草

在使用mvvm模式开发时,对于Command的绑定是一件很伤脑筋的事情,尽管有强大的Blend类库支持:

xmlns:Custom="http://www.galasoft.ch/mvvmlight"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"  
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

 <i:Interaction.Triggers>
      <i:EventTrigger EventName="xxx">
           <Custom:EventToCommand Command="{Binding xxxCommand, Mode=OneWay}"/>
      </i:EventTrigger>
</i:Interaction.Triggers>

有时候我们会为“EventName”伤透脑筋:

 <TabControl>
            <TabItem >

     xxx

    </TabItem>

            <TabItem >

     xxx

    </TabItem>

</TabControl>

我希望在选中第二个TabItem的时候做一些操作,例如加载数据,反之则清除数据,释放内存。

有了Blend,我们很愉快的空降了一个EventToCommand,然后选择EventName——哎~马!根本木有啥“选中”/“不选中”事件!好忧伤~~

这时候“非天秤座”的小伙伴肯定就果断放弃mvvm模式,写后台代码去了,本文完!

 

哎,哎,哎,别打脸,别……

我说,我说还不行吗!

 

  <TabItem >                <TabItem.Header>                    <Grid>                        <CheckBox Visibility="Collapsed" IsChecked="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}" >                            <i:Interaction.Triggers>                                <i:EventTrigger EventName="Checked">                                    <Custom:EventToCommand Command="{Binding xxxCommand, Mode=OneWay}"/>                                </i:EventTrigger>                                <i:EventTrigger EventName="Unchecked">                                    <Custom:EventToCommand Command="{Binding xxxCommand}"/>                                </i:EventTrigger>                            </i:Interaction.Triggers>                        </CheckBox>                        <TextBlock Text="设置" FontSize="32" Padding="20,5"  />                    </Grid>                </TabItem.Header><!--省略--></TabItem>

 重点在这里:IsChecked="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}},Mode=TwoWay}

TabItem虽然没有我们想要的事件,但是有个IsSelected属性,所以我们可以借助CheckBox来转换出我们想要的事件。

 

posted @ 2014-10-20 21:42 陌上青青草 阅读(115) 评论(0) 编辑
摘要: 程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成“动画”。生成BitmapImage的方法有多种:1、var source=new BitmapImage(new Uri("图片路径",UriKind.xxx));一般的场景使用这种方法还是比较方便快捷,但是对于本场景,内存恐怕得爆。2、...阅读全文
posted @ 2014-06-06 11:05 陌上青青草 阅读(580) 评论(20) 编辑
摘要: 在没有接触Blend之前,自己整出了一个MultiTouchHelper,这东西是做什么的呢?就是利用附加属性让元素可以多点触控。然后某一天发现Blend里面有一个Behavior的东西,我去,原来有现成的一个叫TranslateZoomRoateBehavior!第一反应,浪费了本码农两天时间!第二反应,原来本码农的思想已经达到了这种境界(可以写出和大神类似的东西了),相信要不了多久,本码农就可以升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰,想想还有点小激动呢,嘿嘿~~第三反应,TranslateZoomRoateBehavior这玩意儿的名字老长了,而且得添加2个dll,这样阅读全文
posted @ 2014-03-01 10:20 陌上青青草 阅读(776) 评论(5) 编辑
摘要: 本文转自:http://liuqz926.blog.163.com/blog/static/13448936220091121104233491/组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机,是一种一对多的通讯方式。IP组播的好处、优势组播协议与现在广泛使用的单播协议的不同之处在于,一个主机用单播协议向n个主机发送相同的数据时,发送主机需要分别向n个主机发送,共发送n次。一个主机用组播协议向n个主机发送相同的数据时,只要发送1次,其数据由网络中的路由器和交换机逐级进行复制并发送给各个接收方,这样既节省服务器资源也节省网络主干的带宽资源。与广播协议相比,只有组阅读全文
posted @ 2013-09-14 01:22 陌上青青草 阅读(343) 评论(2) 编辑
摘要: 1、首先得说明的是这并不是真正的3D,模型被导出为一系列的单个图片,例如一个3D户型图,以某个视角旋转360°,渲染出一系列连续的单个图片文件。2、在Image.MouseMove事件中添加相应代码,根据move的方向(根据当前鼠标点和前一鼠标点即可判断出),来更新Image.Source(赋值为上一张or下一张图片)3、如果进展顺利,那么你就可以使你的3D模型流畅的旋转起来。然而事情的发展往往让人很不愉快。于是乎,展开各种网络搜索。略去其中各种奇葩想法,例如异步加载啦、预加载啦等等乱七八糟的。1、以空间换时间。使用List/List 预先把所有的图片都加载进内存 400张1.27M阅读全文
posted @ 2013-07-24 22:25 陌上青青草 阅读(985) 评论(5) 编辑
摘要: 首先感叹一下,INotifyPropertyChanged这个单词有点长,我现在都还记不住……其次再感叹一下,实现这个接口,属性的封装还是有点麻烦啊。属性什么的我就喜欢 xxx{get;set;}……不得不说我是一个很懒的猿~首先来看看一般的实现方式: public class NotificationObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 实现依赖属性 ...阅读全文
posted @ 2013-05-18 11:41 陌上青青草 阅读(544) 评论(8) 编辑
摘要: WPF中可以使用MediaElement控件来进行音视频播放,然后需要做个进度条啥的,但是MediaElement.Position(进度)和MediaElement.NaturalDuration居然都不是依赖属性,简直不能忍!好吧,首先说说比较传统的做法(winform?)slider用来显示进度以及调整进度,tb1显示当前进度的时间值,tb2显示视频的时长。player_Loaded 事件中使用DispatcherTimer来定时获取当前视频的播放进度,player_MediaOpened 事件中获取当前视频的时长(只有在视频加载完成后才可以获取到)slider_ValueChanged阅读全文
posted @ 2013-05-17 22:59 陌上青青草 阅读(763) 评论(0) 编辑
摘要: 方法1:后台代码处理MediaEnded事件xaml:<MediaElement Name="player" MediaEnded="player_MediaEnded" Source="Videos/test.wmv" />cs:private void player_MediaEnded(object sender, RoutedEventArgs e) { //设置一下视频进度,确保从头开始播放 player.Position = TimeSpan.Zero; player.Play(); }方法2:xaml中处理M阅读全文
posted @ 2013-05-17 16:33 陌上青青草 阅读(135) 评论(0) 编辑
摘要: wpf制作伪3D图片浏览阅读全文
posted @ 2013-05-14 22:09 陌上青青草 阅读(1961) 评论(8) 编辑
摘要: 1、使用Boder(一般情况):设置CornerRadius属性<Border x:Name="border" CornerRadius="20">...</Border>2、创建ClippingBorder类:View Code using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Controls;using System.Windows.Media;using System.阅读全文
posted @ 2013-05-09 23:49 陌上青青草 阅读(88) 评论(0) 编辑
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Trigger
丰孚草医 16:10:59牙痛方
洗衣协议
《xxx综合酵素液》
WPF CodeBehind设置数据绑定
高阶版:IPTV 终极组网方案
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服