特別的欣賞的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