编辑2:如果你想找一个类似问题的答案,看看斯图尔特的答案和我对它的评论。
编辑:我实际上得到了一个Mono.Debugger.Soft.VMDisconnectedException。我最近还安装了Windows8.1和Resharper (虽然Resharper现在已经挂起)。
当我在MVVMCross Xamarin iOS应用程序中访问视图模型的一个非常简单的list属性时,程序会失败。它并没有在大多数时候退出:它的表现就像它在运行。模拟器有一个黑屏幕,也不例外。如果我在if (messagesViewModel != null) source.ItemsSource = messagesViewModel.Messages;上断点,然后在“立即”窗口中键入messagesViewModel.Messages,那么一切都会停止,这样我就可以知道它在这一行失败了。如果我“踩过去”,它永远不会移动到下一行。
在MvxTableViewSource中切换这段代码时,我也有类似的行为。
public override int RowsInSection(UITableView tableview, int section)
{
return 1;
}我的视图模型如下所示:
public class MessagesViewModel : MvxViewModel
{
private List<BaseMessage> _messages = null;
public List<BaseMessage> Messages
{
get
{
return _messages; //yes, I know I'm returning null
//I wasn't at first.
}
}
public MessagesViewModel()
{
}
}这是我在ViewDIdLoad上的MvxTableViewController:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var source = new MessagesTableViewSource(TableView);
//was binding here, removed it for debug purposes
//failure on second line here
var messagesViewModel = ViewModel as MessagesViewModel;
if (messagesViewModel != null) source.ItemsSource = messagesViewModel.Messages;
TableView.Source = source;
TableView.ReloadData();
}一些初始化代码:
public class App : MvxApplication
{
public App()
{
var appStart = new MvxAppStart<MessagesViewModel>();
Mvx.RegisterSingleton<IMvxAppStart>(appStart);
}
}
public partial class AppDelegate : MvxApplicationDelegate
{
//empty functions removed.
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Window = new UIWindow(UIScreen.MainScreen.Bounds);
var presenter = new MvxTouchViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();
var startup = Mvx.Resolve<IMvxAppStart>();
startup.Start();
Window.MakeKeyAndVisible();
return true;
}
}发布于 2013-10-21 14:35:20
我怀疑无论错误是什么,它没有出现在您发布的任何代码中。
我刚刚创建了一个简单的ViewModel:
public class FirstViewModel
: MvxViewModel
{
private List<string> _items = new List<string>() { "One", "Two", "Three"};
public List<string> Items
{
get { return _items; }
set { _items = value; RaisePropertyChanged(() => Items); }
}
}还有一个简单的观点:
[Register("FirstView")]
public class FirstView : MvxTableViewController
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
// ios7 layout
if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
EdgesForExtendedLayout = UIRectEdge.None;
var firstViewModel = ViewModel as FirstViewModel;
var source = new MessagesTableViewSource(TableView);
source.ItemsSource = firstViewModel.Items;
TableView.Source = source;
}
public class MessagesTableViewSource : MvxTableViewSource
{
public MessagesTableViewSource(UITableView tableView) : base(tableView)
{
tableView.RegisterClassForCellReuse(typeof(MessagesCell), new NSString("MessagesCell"));
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
{
return tableView.DequeueReusableCell("MessagesCell");
}
}
public class MessagesCell : MvxTableViewCell
{
public MessagesCell(IntPtr handle)
: base(handle)
{
var txt = new UILabel(new RectangleF(0, 0, 320, 44));
Add(txt);
this.DelayBind(() =>
{
this.CreateBinding(txt).Apply();
});
}
}
}这个代码运行良好..。
我不会完全相信Xamarin.iOS与即时窗口的集成--现在比以前好多了,但我以前见过几个问题。
有些事情可能需要检查:
BaseMessage和MessagesTableViewSource类中有什么--可能是它们导致了问题?
Mvx.Trace("The list is {0}", messagesViewModel.Messages ?? "-null")查看列表吗?可以在ViewModel属性get中使用跟踪吗?是否正在调用它?可以在ViewModel构造函数中使用跟踪吗?https://stackoverflow.com/questions/19496645
复制相似问题