以前使用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深处的事件处理程序,我可以使用它还是我必须实现自己的?
提前致谢
答案 0 :(得分:4)
PropertyChanged
应该仍然存在 - 它是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的网址执行完全自定义绑定,请参阅:Dynamic Binding UIWebView in MVVMCross(iOS代码 - 但Android版本类似)