tipcalc template supported samples platforms mvvm binding mvvmcross

template - tipcalc mvvmcross



Enlazado dinĂ¡mico UIWebView en MVVMCross (1)

Estoy tratando de hacer un cambio al proyecto de muestra Cirrious.Conference. En particular, en la vista táctil en la clase SessionView y en esta clase

https://github.com/slodge/MvvmCross-Tutorials/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.Core/ViewModels/SessionLists/BaseSessionListViewModel.cs

en el método

protected void NavigateToSession(Session session) { ShowViewModel<SessionViewModel>(new { key = session.Key }); }

Me gustaría abrir un UIWebView (en la aplicación) vinculando LoadRequest con una propiedad de clase Session (supongamos que tiene una propiedad URL ...). He creado un objeto UIWebView en SessionView, pero no es posible crear un enlace Swisse ... Tal vez sea posible con un enlace personalizado ...

¿Cómo podría hacerlo?


Como UIWebView no expone una propiedad para LoadRequest , no puede enlazarse directamente a ella.

Si desea utilizar el enlace para LoadRequest , las 3 opciones disponibles para usted son:

  1. MyWebView de UIWebView , agregue una propiedad C # que LoadRequest y luego use esa clase en su UI y esa propiedad en su enlace suizo, por ejemplo:

    [Register("MyWebView")] public class MyWebView : UIWebView { public MyWebView() { } public MyWebView(IntPtr handle) : base(handle) { } private string _myUrl; public string MyUrl { get { return _myUrl; } set { if (_myUrl == value) return; _myUrl = value; LoadRequest(value); // or similar (I''ve not checked the syntax!) } } }

  2. Implemente un enlace suizo personalizado y agréguelo a su Setup.cs. El proceso para esto se describe en esta presentación de Custom Bindings , que también incluye enlaces a algunos ejemplos (uno de ellos está en la aplicación Conference).

  3. Si esta propiedad nunca cambiará, entonces no use el enlace y simplemente llame a LoadRequest en su MvxViewController ViewDidLoad - por ej.

    public void ViewDidLoad() { base.ViewDidLoad(); var myViewModel = (MyViewModel)ViewModel; var url = myViewModel.Url; TheWebView.LoadRequest(url); }