2013-04-29 76 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