I want to show a UIPopoverController by clicking on a UIBarButtonItem on the Navigation bar. This UIPopoverController needs a "ContentViewController", that would be a MvxTableViewController with some data-binding. The problem is, if I instantiate some class derived from MvxTableViewController directly - instead of doing ShowViewModel<blah>(), I got an exception on "base.ViewDidLoad" on the overriden method ViewDidLoad.
What am I missing?
Thanks in advance!
EDIT:
If i use, for instance, a MvxViewController with an UITableView:
public class Test : MvxViewController
{
public override void ViewDidLoad()
{
View = new UIView() { BackgroundColor = UIColor.White };
//TableView = new UITableView(new RectangleF(0, 0, 300, 300));
base.ViewDidLoad();
var table = new UITableView(new RectangleF(0, 0, 300, 300));
// ios7 layout
if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
EdgesForExtendedLayout = UIRectEdge.None;
var source = new MvxStandardTableViewSource(table, "TitleText Nome");
table.Source = source;
var set = this.CreateBindingSet<Test, Core.ViewModels.FirstViewModel>();
set.Bind(source).To(vm => vm.Distritos);
set.Apply();
table.ReloadData();
}
}
And if i have, on FirstViewModel's ViewDidLoad, during the construction of a Navigation Bar:
var buttonLocalizacao = new UIBarButtonItem("Localização", UIBarButtonItemStyle.Plain, (s, e) => {
distritoViewController = new Test();
nc = new UINavigationController(distritoViewController);
var distritoPopOver = new UIPopoverController(nc);
distritoPopOver.ContentViewController = nc;
distritoPopOver.PopoverContentSize = new SizeF(300, 300);
distritoPopOver.PresentFromBarButtonItem((UIBarButtonItem)s, UIPopoverArrowDirection.Up, true);
});
Everytime i hit the UIBarButtonItem "Localização" i get an exception on Test's "base.ViewDidLoad". Does this make sense?
EDIT 2:
This is the exception i receive:
"Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object at Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request, IMvxBundle savedState) [0x00000] in :0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods.LoadViewModel (IMvxTouchView touchView) [0x00000] in :0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods+<>c__DisplayClass1.b__0 () [0x00000] in :0 at Cirrious.MvvmCross.Views.MvxViewExtensionMethods.OnViewCreate (IMvxView view, System.Func`1 viewModelLoader) [0x00000] in :0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods.OnViewCreate (IMvxTouchView touchView) [0x00000] in :0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerAdapter.HandleViewDidLoadCalled (System.Object sender, System.EventArgs e) [0x00000] in :0 "
Testcouldn't be loaded. If you need to you can always set the ViewModel/DataContext yourself before callingbase.ViewDidLoad()- but without a DataContext then no data can be shown. - Stuart