我目前正在开发一个使用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。我想我没有使用好的代码。如果您有任何想法,我会接受它们。
感谢您的帮助,祝您有个美好的一天!
答案 0 :(得分:5)
命令参数未传递给命令。通过将CommandParameter传递给VM
来尝试以下代码CommandParameter="{Binding ElementName=listBox, Path=SelectedItem}