2013-06-11 1 views
2

Ранее, используя V2, я загружал содержимое в WebView с помощью обработчика событий, доступного в коде просмотра (см. Ниже), поскольку я не мог найти способ загрузки данных через привязку в xml.Что заменяет модель представления MvvmCross PropertyChanged в V3 Hot Tuna?

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, и я не смог найти замену. Есть ли скрытый обработчик событий в глубине горячего тунца, который я могу использовать, или мне придется реализовать свою собственную?

Заранее спасибо

+0

Какого сообщения об ошибке (ы) означает код даст вам ? – Stuart

+0

Сообщение об ошибке: '' Cirrious.MvvmCross.ViewModels.IMvxViewModel 'не содержит определения для' PropertyChanged 'и не используется метод расширения' PropertyChanged ', принимающий первый аргумент типа' Cirrious.MvvmCross.ViewModels.IMvxViewModel ', который можно найти (вам не хватает директивы использования или ссылки на сборку?) ' – Chunk

ответ

3

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 += // ... 

В качестве альтернативы, если вы хотите сделать полную пользовательские привязки для URL для WebView, см: Dynamic Binding UIWebView in MVVMCross (IOS кода - но Android-версия похожа)

+0

Большое спасибо Стюарту, кастинг работал с удовольствием, и вы выделили мне, что я наследовал от MvxViewModel, а не' IMvxViewModel'. Пользовательское связывание для WebView, с которым я борюсь, но я обвиняю это в Android ... – Chunk