C# 在MVVMCross中将参数从Main传递到Detail
我试图将所选项目从列表传递到详细视图,但是C# 在MVVMCross中将参数从Main传递到Detail,c#,xamarin,mvvmcross,C#,Xamarin,Mvvmcross,我试图将所选项目从列表传递到详细视图,但是myitem在DetailViewmodel中为空,即使它不在MyViewModel中 MyViewModel.cs public virtual ICommand ItemSelected { get { return new MvxCommand<MyViewModel>(item =>{SelectedItem = item;}); }
myitem
在DetailViewmodel
中为空,即使它不在MyViewModel
中
MyViewModel.cs
public virtual ICommand ItemSelected
{
get
{
return new MvxCommand<MyViewModel>(item =>{SelectedItem = item;});
}
}
public MyViewModel SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
// myItem is NOT null here!!!
ShowViewModel<MyDetailViewModel>(new { date = Date, myItem = _selectedItem });
RaisePropertyChanged(() => SelectedItem);
}
}
myItem为null,因为如果将类型化参数传递给
Init
,则它应该是唯一传递的参数。根据:
Init()可以有几种风格:
- 单个简单类型参数
- 具有简单类型属性的单类型参数对象
- 作为带有IMvxBundle参数的InitFromBundle(),IMvxViewModel接口始终支持最后一种风格
myItem为null,因为如果将类型化参数传递给
Init
,则它应该是唯一传递的参数。根据:
Init()可以有几种风格:
- 单个简单类型参数
- 具有简单类型属性的单类型参数对象
- 作为带有IMvxBundle参数的InitFromBundle(),IMvxViewModel接口始终支持最后一种风格
可以使用参数对象,因为只能传递一个参数。为此,我通常使用嵌套类
参数
public class MyDetailViewModel: MvxViewModel
{
private MyViewModel _myItem;
public class Parameter
{
public DateTime Date {get; set; }
public string Name {get; set;}
}
public void Init(Parameter param)
{
Name = param.Name;
}
}
并显示viewmodel,如下所示:
ShowViewModel<MyDetailViewModel>(new MyDetailViewModel.Parameter { Date = Date, Name = _selectedItem.Name });
ShowViewModel(新的MyDetailViewModel.Parameter{Date=Date,Name=\u selectedItem.Name});
但是要注意!
由于某些平台问题,参数不能太复杂。您可能只需要在参数
对象中传递项目的Id
,然后在Init函数中加载MyItem
。或者只传递字符串并使用序列化:您可以使用参数对象,因为您只能传递一个参数。为此,我通常使用嵌套类参数
public class MyDetailViewModel: MvxViewModel
{
private MyViewModel _myItem;
public class Parameter
{
public DateTime Date {get; set; }
public string Name {get; set;}
}
public void Init(Parameter param)
{
Name = param.Name;
}
}
并显示viewmodel,如下所示:
ShowViewModel<MyDetailViewModel>(new MyDetailViewModel.Parameter { Date = Date, Name = _selectedItem.Name });
ShowViewModel(新的MyDetailViewModel.Parameter{Date=Date,Name=\u selectedItem.Name});
但是要注意!
由于某些平台问题,参数不能太复杂。您可能只需要在参数
对象中传递项目的Id
,然后在Init函数中加载MyItem
。或者只传递一个字符串并使用序列化:,但我还有一个地方没有第二个要传递的参数。我应该如何处理它?只是在调用ShowViewModel
时不要在参数类中设置它。例如,在Init
函数中,您可以编写if(param.Item!=null)
。我仍然得到null<代码>参数项
为空。日期不为空,但项为空。请参见“注意”部分:),这取决于您的项类实际解决方案的外观。MyItem
只是一个包含年龄、性别等的小对象。但我还有一个地方没有第二个参数要传递。我应该如何处理它?只是在调用ShowViewModel
时不要在参数类中设置它。例如,在Init
函数中,您可以编写if(param.Item!=null)
。我仍然得到null<代码>参数项
为空。日期不为空,但项为空。请参见“注意”部分:),因此它取决于您的项类实际解决方案的外观。MyItem
只是一个包含年龄、性别等的小对象。