豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现Event绑定
这次实现了MVVM Light事件的绑定。MVVM Light为事件绑定提供了很好的支持,它有很多种方式可以实现。对于支持Command的事件比如Button的Click事件那么最简单可以直接绑定Command。对于不支持Command的事件比如TextChanged可以使用InvokeCommandAction或者EventToCommand来绑定。这里我就不展开了,因为自己也是一知半解,以免误导看客。这次我演示使用EventToCommand来绑定HubTile的Tap事件。
在ViewModel里定义一个RelayCommand:
   
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:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP71"
绑定tap:
<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的思想。
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机制实现页面导航。
       
QQ群:1022985150 VX:kklldog 一起探讨学习.NET技术
作者:Agile.Zhou(kklldog)            
 
出处:http://www.cnblogs.com/kklldog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号