MvvmCross绑定命令与Windows Phone中的参数

时间:2014-06-19 09:26:37

标签: xaml windows-phone-8 binding xamarin mvvmcross

我目前正在开发一个使用Xamarin和MvvmCross开发的简单应用程序。 我有一个简单的项目列表,我希望点击一个项目打开一个新的视图。

我设法在Android中执行以下操作:

视图的.axml中的此代码

ListCustomersView.xaml

<MvxListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        local:MvxItemTemplate="@layout/listcustomerscell"
        local:MvxBind="ItemsSource ListCustomers; ItemClick ShowCommand"
        android:id="@+id/listCustomersView" />

和ViewModel文件中的代码:

ListCustomersViewModel.cs

private MvxCommand<CustomerListDTO> _showCommand;
public ICommand ShowCommand
{
     get { return _showCommand ?? (_showCommand = new MvxCommand<CustomerListDTO>(c => this.ShowCustomerDetail(c))); }
}

public void ShowCustomerDetail(CustomerListDTO c)
{
    ShowViewModel<CustomerDetailViewModel>(new CustomerDetailParameters() { CustomerID = c.Id });
}

如您所见,我通过命令发送一个参数:CustomerDetailParameters类的一个实例。它在Android中运行良好,但我无法在Windows Phone中实现这一点。

我在ListCustomersView.xaml中使用此代码:

<ListBox Name="listBox" ItemsSource="{Binding ListCustomers}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <controls:ListCustomersCell />
            </DataTemplate>
        </ListBox.ItemTemplate>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding ShowCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
</ListBox>

ShowCommand调用良好,但应发送的CustomerListDTO为null。我想我没有使用好的代码。如果您有任何想法,我会接受它们。

感谢您的帮助,祝您有个美好的一天!

1 个答案:

答案 0 :(得分:5)

命令参数未传递给命令。通过将CommandParameter传递给VM

来尝试以下代码
CommandParameter="{Binding ElementName=listBox, Path=SelectedItem}