viewdestroy tutorial standard net example c# xamarin mvvmcross

c# - tutorial - mvvmcross xamarin forms



Al pasar el parĂ¡metro de Principal a Detalle en MVVMCross (2)

myItem es nulo porque si pasa el parámetro escrito a Init , debería ser el único parámetro que pase. De acuerdo con la documentación de MvvmCross ViewModel Creation :

Init () puede venir en varios sabores:

  • parámetros individuales de tipo simple
  • un único objeto de parámetro escrito con propiedades simplemente tipadas
  • como InitFromBundle () con un parámetro IMvxBundle: este último sabor siempre se admite a través de la interfaz IMvxViewModel.

Estoy tratando de pasar el elemento seleccionado de la lista a la vista de detalles, pero myitem es nulo en el DetailViewmodel aunque no se encuentre en 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); } }

MyDetailViewModel.cs

public class MyDetailViewModel: MvxViewModel { private MyViewModel _myItem; public void Init(DateTime date, MyViewModel myItem = null) { // myItem is NULL here!!! _myItem = myItem; } }


Puede usar un objeto de parámetro, porque solo puede pasar un parámetro. Por lo general, marco un Parameter clase anidado para esto.

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; } }

y muestre el modelo de vista como:

ShowViewModel<MyDetailViewModel>(new MyDetailViewModel.Parameter { Date = Date, Name = _selectedItem.Name });

¡Pero ten cuidado!

Los parámetros no pueden ser complejos debido a ciertos problemas de la plataforma. Puede que tenga que pasar solo el Id de su Elemento dentro del objeto Parameter y luego cargar MyItem en su función Init. O solo pasa una cadena y utiliza la serialización: https://.com/a/19059938/1489968