2015-04-12 29 views
0

我在我的项目中使用MVVM光,我想知道是否有任何方式使用RelayCommand与所有控件(例如ListView或网格)。使用继电器命令不仅按钮

这里是我当前的代码:

private void Item_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
    var currentItem = (TechItem)GridControl.SelectedItem; 
    if(currentItem != null) 
     Frame.Navigate(typeof(TechItem), currentItem); 
} 

我想搬到这个代码模型,并使用RelayCommand,但ListView控件,网格和其他控件没有CommandCommandParameter属性。

MVVM Light在这种情况下提供什么功能?

+1

你可以用'Interaction.Behaviors'将事件绑定到命令[如何添加命令行为在Windows应用商店8.1 MVVM应用程序](http://stackoverflow.com/questions/23467911/how-to-add-command-behavior-in-windows-store-8-1-mvvm-application) – har07

+0

你可以使项目模板按钮? –

+0

@ har07,谢谢。它帮助到我 – demas

回答

1

继续从链接har07发布这可能对你有一些用处,因为我看到你提到CommandParameter

可以使用自定义转换器将列表中的“Tapped”项作为参数发送到中继命令。

<ListView 
    x:Name="MyListView" 
    ItemsSource="{Binding MyCollection}" 
    ItemTemplate="{StaticResource MyTemplate}" 
    IsItemClickEnabled="True"> 

    <i:Interaction.Behaviors> 
     <core:EventTriggerBehavior EventName="ItemClick"> 
      <core:InvokeCommandAction Command="{Binding ViewInMoreDetail}" InputConverter="{StaticResource TapConverter}" /> 
     </core:EventTriggerBehavior> 
    </i:Interaction.Behaviors> 

</ListView> 

自定义转换器类

public class TapConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var args = value as ItemClickEventArgs; 

     if (args != null) 
      return args.ClickedItem; 

     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

在您的视图模型,你再有一个relaycommand

public RelayCommand<MyObject> MyRelayCommand 
{ 
    get; 
    private set; 
} 

在您的构造函数中初始化中继命令和您想要在轻敲发生时触发的方法。

MyRelayCommand = new RelayCommand<MyObject>(HandleTap); 

该方法接收在列表视图中作为参数点击的对象。

private void HandleTap(MyObject obj) 
{ 
    // obj is the object that was tapped in the listview. 
} 

不要忘记将TapConverter添加到您的App.xaml

<MyConverters:TapConverter x:Key="TapConverter" />