MVVMCross 中动态绑定 UIWebView

问题描述 投票:0回答:1

我正在尝试对示例项目 Cirrious.Conference 进行更改。特别是在 SessionView 类和此类的 Touch View 中

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

我想打开一个 UIWebView(在应用程序中)将 LoadRequest 与 Session 类的属性绑定(假设有一个属性 URL...)。我已经在 SessionView 中创建了一个 UIWebView 对象,但无法创建 Swisse Binding...也许可以使用 customBinding...

我该怎么办?

mvvm binding mvvmcross
1个回答
8
投票

由于

UIWebView
没有公开
LoadRequest
的属性,因此您无法直接绑定到它。

如果您想对

LoadRequest
使用绑定,那么您可以使用 3 个选项:

  1. MyWebView
    继承
    UIWebView
    ,添加驱动
    LoadRequest
    的 C# 属性,然后在 UI 中使用该类并在 Swiss 绑定中使用该属性 - 例如:

         [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. 实现自定义目标 Swiss 绑定并将其添加到您的 Setup.cs 中。此自定义绑定演示文稿中描述了此过程 - 其中还包括一些示例的链接(其中一个位于会议应用程序中)

  3. 如果此属性永远不会更改,则不要使用绑定,而只需在

    MvxViewController
    ViewDidLoad 中调用 LoadRequest - 例如

          public void ViewDidLoad()
          {
              base.ViewDidLoad();
    
              var myViewModel = (MyViewModel)ViewModel;
              var url = myViewModel.Url;
              TheWebView.LoadRequest(url);
          }
    
© www.soinside.com 2019 - 2024. All rights reserved.