2013-05-14 1 views
1

Я пытаюсь внести изменения в образец проекта Cirrious.Conference. В частности, в сенсорном Вид на классе SessionView и в этом классеДинамическое связывание UIWebView в MVVMCross

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

по методу

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

Я хотел бы OpenL в UIWebView (в приложении) связывания LoadRequest со свойством класса Сессия (предположим, что у вас есть URL-адрес свойства ...). Я создал объект UIWebView в SessionView, но невозможно создать Swisse Binding ... Возможно, это возможно с помощью customBinding ...

Как я могу это сделать?

ответ

5

С UIWebView не выставляет недвижимость за LoadRequest, то вы не можете напрямую связать ее.

Если вы хотите использовать связывание для LoadRequest, затем 3 опции, доступные для вас:

  1. Наследование MyWebView из UIWebView, добавьте C# свойство, которое управляет LoadRequest, а затем использовать этот класс в вашем пользовательском интерфейсе, и недвижимость в швейцарском связывании - например:

    [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. Реализовать собственную цель швейцарского связывания и добавить их к Setup.cs. Процесс для этого описан в этой презентации Custom Bindings, которая также включает ссылки на некоторые примеры (один из них находится в приложении для конференции)

  3. Если это свойство никогда не изменится, не используйте привязку и вместо этого просто вызывайте LoadRequest в вашем MvxViewController ViewDidLoad - например

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

Ничего не сказать! Слава Богу!! –