0

特别是 ViewModels 上的 Views 之间的导航看起来像这样:

ShowViewModel<InfoViewModel>();

或在正常活动之间:

context.StartActivity(typeof(InfoActivity));

我现在面临的问题(实际上我在我的一个最新项目中通过使用 Tinymessenger 解决了它 - 它是用于松散耦合通信的事件聚合器/信使)但我想知道是否有其他方法!

我正在创建一个选项菜单:

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”,但那是PreferenceActivity,因此没有理由失败。问题是,我想从这里开始InfoActivity(如您在代码中看到的 - 第二项),但这不起作用。它打开了活动,但列表没有被填满。

但是,如果我在我的项目中转到 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);
        }
    }
}

有什么建议么?

4

1 回答 1

2

我不知道你在说什么。说真的,你刚刚在屏幕上倾倒了很多东西。

我认为你已经让自己非常困惑 - 祝你好运,试图弄清楚你到底做了什么。

一个基本的答案是,您可以通过以下方式导航到任何您想要的基于 Mvx 的活动:

但是,我强烈建议您走出当前的混乱局面,考虑使用更清洁的应用程序流程。

于 2013-04-29T14:36:01.183 回答