2013-04-29 68 views
0

特別的欣賞的ViewModels之間的導航看起來像這樣:從正常活動啓動MvxActivity?

ShowViewModel<InfoViewModel>(); 

或正常活動之間:

context.StartActivity(typeof(InfoActivity)); 

我現在面臨的問題(其實我解決它在我最新的一個項目通過使用Tinymessenger - 它是一個事件聚合器/信使鬆散耦合通信),但我想知道是否有其他方式!

我創建一個optionsmenu:

public abstract class BaseActivityWithoutTabs<T> : MvxActivity where T : class, IMvxViewModel 
{ 
     public override bool OnCreateOptionsMenu(IMenu menu) 
     { 
      return ActivitiesHelper.CreateOptionsMenu(menu); 
     } 

     public override bool OnOptionsItemSelected(IMenuItem item) 
     { 
      return ActivitiesHelper.CreateOnOptionsItemSelectedEvent(item, this); 
     } 
} 

InfoActivity從這個BaseActivityWithoutTabs派生。

在ActivitiesHelper類(從上面的代碼中)我創建菜單和事件:

public class ActivitiesHelper 
{ 
    private const int einstellungenItemId = 0; 
    private const int infoItemId = 1; 

    public static bool CreateOptionsMenu(IMenu menu) 
    { 
     // GroupId, ItemId, OrderId 
     menu.Add(0, einstellungenItemId, 0, "Einstellungen").SetIcon(Android.Resource.Drawable.IcMenuManage); 
     menu.Add(0, infoItemId, 1, "Info").SetIcon(Android.Resource.Drawable.IcMenuInfoDetails); 
     return true; 
    } 

    public static bool CreateOnOptionsItemSelectedEvent(IMenuItem item, Context context) 
    { 
     var id = item.ItemId + 1; // (Id is zero-based :) 
     if (id == 1) // First Item 
     { 
      context.StartActivity(typeof(SettingsShowActivity)); 
     } 
     else if (id == 2) // Second Item 
     { 
      context.StartActivity(typeof(InfoActivity)); //doesn't work... 
     } 
     return true; 
    } 
} 

正如你看到我在這裏做「StartActivity」 ..它的工作原理爲先「SettingsShowActivity」,但那是一個偏好活動,所以沒有理由爲什麼它會失敗。問題是,我想從這裏開始InfoActivity(正如你在代碼中看到的 - 第二項),這是行不通的。它會打開Activity,但List不會被填充。

但是,如果我去我的項目中的ViewModel,並打電話:ShowViewModel<InfoViewModel>();它工作正常,但這是在那個地方(在ActivitiesHelper類)不可用/可能!

public class InfoViewModel : MvxViewModel 
{ 
    public InfoViewModel() 
    { 
     Info info = new Info(); 
     info.Key = "ITS A KEYY"; 
     info.Value = "here we got a value"; 
     ObservableCollection<Info> asd = new ObservableCollection<Info>(); 
     asd.Add(info); 
     Infos = asd; 
    } 

    private ObservableCollection<Info> infos = new ObservableCollection<Info>(); 
    public ObservableCollection<Info> Infos 
    { 
     get 
     { 
      return infos; 
     } 
     set 
     { 
      infos = value; 
      RaisePropertyChanged(() => Infos); 
     } 
    } 
} 

有什麼建議嗎?

回答

1

我不知道你在說什麼。說真的,你剛剛在屏幕上扔了很多東西。

我想你已經弄得很困惑 - 試圖找出你所做過的事情的好運氣。

一個基本的答案是,你可以瀏覽到一個基於MVX-活動的任何地方,你想僅僅通過:

但是,我認真地建議你走出當前的混亂局面,並考慮更清潔的應用程序流程。

+0

通過像這樣的導航,我得到了和普通的'StartActivity'一樣的結果。你應該嘗試以下幾點:使用選項菜單創建一個活動。通過點擊選項菜單中的項目,它應該打開一個連接到ViewModel的新的Mvx活動。在這個ViewModel的構造函數中,嘗試填充一個基本的MvxListView(它在Activity上)。它不會工作。它只會打開新的Activity,但是如果我從其他ViewModel調用'ShowViewModel',列表將不會被填充。無論如何, – eMi 2013-04-29 15:15:41

+0

+1的努力 – eMi 2013-04-29 15:16:37