前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现Event绑定

豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现Event绑定

作者头像
MJ.Zhou
发布2022-05-07 16:15:00
6920
发布2022-05-07 16:15:00
举报
文章被收录于专栏:.NET开发那点事.NET开发那点事

这次实现了MVVM Light事件的绑定。MVVM Light为事件绑定提供了很好的支持,它有很多种方式可以实现。对于支持Command的事件比如Button的Click事件那么最简单可以直接绑定Command。对于不支持Command的事件比如TextChanged可以使用InvokeCommandAction或者EventToCommand来绑定。这里我就不展开了,因为自己也是一知半解,以免误导看客。这次我演示使用EventToCommand来绑定HubTile的Tap事件。

在ViewModel里定义一个RelayCommand:

代码语言:javascript
复制
 
namespaceDBFM7.ViewModel    
{    
 public classChannelTileViewModel: ViewModelBase 
 {    
 /// <summary>     
        ///Initializes a new instance of the ChannelTileViewModel class.     
 /// </summary>     
 publicChannelTileViewModel()    
        {    
 TouchPanel.EnabledGestures = GestureType.Tap | GestureType.HorizontalDrag;    
 
 this._TapCommand = newRelayCommand<string>(this.HubTile_Tap);    
        }    
 
 
 privateRelayCommand<string> _TapCommand;    
 
 publicRelayCommand<string> TapCommand    
        {    
 get{ return_TapCommand; }    
 set     
 {    
                _TapCommand = value;    
 this.RaisePropertyChanged("TapCommand");    
            }    
        }    
 
  private voidHubTile_Tap(string hubTile)    
        {
         MessageBox.Show(hubTile);
 
        }    
 
 
    }    
}

在View添加xmlns:

代码语言:javascript
复制
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP71"

绑定tap:

代码语言:javascript
复制
     <toolkit:HubTile Grid.Row="0" Grid.Column="1"
                              Margin="12,12,0,0"
                             x:Name="OM" >
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Tap">
                        <cmd:EventToCommand Command="{Binding TapCommand}" 
                                            CommandParameter="{ Binding Title, ElementName=OM }" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </toolkit:HubTile>

EventToCommand 的 Command绑定命令,CommandParameter绑定的是传递的参数。其中PassEventArgsToCommand可以传递事件的args。

我本来是要想传递事件的sender过去的,虽然可以实现,不过过于繁琐,且在国外论坛看到这样传递不符合MVVM的思想。

代码语言:javascript
复制
My stance on MVVM is:   
View : knows about ViewModel    
ViewModel : knows about Model (has NO knowledge of View)    
Model : holds data. (has NO knowledge of ViewModel, View)

所以传递sender到VM是不合适的。

更多的关于事件绑定请参考:http://geekswithblogs.net/lbugnion/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx 下节我将在WP7中使用MVVM Light的Message机制实现页面导航。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档