特别的欣赏的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);
}
}
}
有什么建议吗?
通过像这样的导航,我得到了和普通的'StartActivity'一样的结果。你应该尝试以下几点:使用选项菜单创建一个活动。通过点击选项菜单中的项目,它应该打开一个连接到ViewModel的新的Mvx活动。在这个ViewModel的构造函数中,尝试填充一个基本的MvxListView(它在Activity上)。它不会工作。它只会打开新的Activity,但是如果我从其他ViewModel调用'ShowViewModel',列表将不会被填充。无论如何, – eMi 2013-04-29 15:15:41
+1的努力 – eMi 2013-04-29 15:16:37