2

以前使用 V2,我使用在视图代码中访问的事件处理程序(见下文)将内容加载到 WebView 中,因为我找不到通过 xml 中的绑定加载数据的方法。

    this.ViewModel.PropertyChanged += new PropertyChangedEventHandler(EventHandlerFoo);

    private void EventHandlerFoo(object sender, EventArgs e)
    {
       PropertyChangedEventArgs eventArgs = (PropertyChangedEventArgs) e;
       if (eventArgs.PropertyName == "Foo")
       {
           WebView webView = item.FindViewById<WebView>(Resource.Id.fooWebView);
           string body = item.FindViewById<TextView>(Resource.Id.fooUrl).Text;
           webView.LoadData(body, "text/html", "utf-8");
       }
    }

这在 V3 中不再可用,我无法找到替代品。是否有一个隐藏在 Hot Tuna 深处的事件处理程序可以使用,或者我必须自己实现?

提前致谢

4

1 回答 1

4

PropertyChanged应该仍然存在 - 它是 MvvmCross 的一部分INotifyPropertyChanged并在整个 MvvmCross 中使用。

我目前在移动网络上,但我猜你现在看不到它的原因是因为IMvxViewModel附加到你的MvxActivity不必继承INotifyPropertyChanged- 请参阅https://github.com/slodge/MvvmCross /blob/v3/Cirrious/Cirrious.MvvmCross/ViewModels/IMvxViewModel.cs

如果您想回到之前拥有完整强类型 ViewModel 的功能,您可以使用(例如)

 public new MyViewModel ViewModel
 {
    get { return base.ViewModel as MyViewModel; }
    set { base.ViewModel = value; }
 }

或者您可以将其转换为您的代码:

 ((MyViewModel)this.ViewModel).PropertyChanged += // ...

或者,如果您想为 webview 的 url 进行完全自定义绑定,请参阅:Dynamic Binding UIWebView in MVVMCross(iOS 代码 - 但 Android 版本类似)

于 2013-06-12T05:29:46.647 回答