特别是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);
}
}
}
有什么建议吗?
答案 0 :(得分:1)
我不知道你在说什么。说真的,你刚刚在屏幕上丢了很多东西。
我认为你已经让自己感到很困惑 - 祝你好运,想要找出你已经完成的事情。
一个基本答案是,您可以通过以下方式导航到基于Mvx的活动:
MvxViewModelRequest
- https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross/ViewModels/MvxViewModelRequest.cs Intent
单例 - https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Views/IMvxAndroidViewModelRequestTranslator.cs IMvxAndroidViewModelRequestTranslator
Intent
但是,我认真地建议你走出目前的混乱,并考虑更清洁的申请流程。