尝试了解mvvmcross和xib编辑器 - 我已经按照
中的示例代码进行了操作http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html
并在我的代码中加入了一些内容。
namespace ConX.UI.Touch.Cells
{
[Register("JobCell")]
public partial class JobCell : MvxBaseBindableTableViewCell
{
public static NSString Identifier = new NSString("JobCell");
public const string BindingText = @"{'JobDescription':{'Path':'Description'}, 'JobScheduledForDate':{'Path':'ScheduledForDate'}, 'JobNumber':{'Path':'JobNo'}}";
public JobCell(): base(BindingText)
{
}
public JobCell(IntPtr handle): base(BindingText, handle)
{
}
public JobCell (string bindingText): base(bindingText, UITableViewCellStyle.Default, Identifier)
{
}
public string JobDescription
{
get { return this.DescriptionLabel.Text; }
set { this.DescriptionLabel.Text = value; }
}
public string JobScheduledForDate
{
get { return ScheduledForDateLabel.Text; }
set { ScheduledForDateLabel.Text = value; }
}
public string JobNumber
{
get { return NumberLabel.Text; }
set { NumberLabel.Text = value; }
}
}
}
using MonoTouch.Foundation;
namespace ConX.UI.Touch.Cells
{
partial class JobCell
{
[Outlet]
MonoTouch.UIKit.UILabel DescriptionLabel { get; set; }
[Outlet]
MonoTouch.UIKit.UILabel ScheduledForDateLabel { get; set; }
[Outlet]
MonoTouch.UIKit.UILabel NumberLabel { get; set; }
void ReleaseDesignerOutlets ()
{
if (DescriptionLabel != null) {
DescriptionLabel.Dispose ();
DescriptionLabel = null;
}
if (ScheduledForDateLabel != null) {
ScheduledForDateLabel.Dispose ();
ScheduledForDateLabel = null;
}
if (NumberLabel != null) {
NumberLabel.Dispose ();
NumberLabel = null;
}
}
}
}
我无法通过抛出以下错误来完成此工作 - 似乎没有创建出口?
System.NullReferenceException: Object reference not set to an instance of an object
at ConX.UI.Touch.Cells.JobCell.set_JobDescription (System.String value) [0x00008] in
/Volumes/ConXPrototype/Conx.UI.Touch/Cells/JobCell.cs:32
at
ConX.UI.Touch.Views.BaseJobListView`2+TableSource[ConX.Core.ViewModels.JobListViewModel,Syst
em.DateTime].GetOrCreateCellFor (MonoTouch.UIKit.UITableView tableView,
MonoTouch.Foundation.NSIndexPath indexPath, System.Object item) [0x00025] in
/Volumes/ConXPrototype/Conx.UI.Touch/Views/BaseJobListView.cs:101
at Cirrious.MvvmCross.Binding.Touch.Views.MvxBaseBindableTableViewSource.GetCell
(MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
[0x00000] in <filenam
非常感谢 克恩
答案 0 :(得分:1)
我猜你正在运行旧版本的MvvmCross框架二进制文件。
我们在过去4周内进行了一些关键更改,这些更改延迟了数据绑定的发生,直到细胞和来源真正可用于绑定。您可以在Bindable Cell changes on GitHub
看到这些更改有两种可能的解决方法:
A。升级到更新的程序集 - 记录该博客帖子时使用的程序集在https://github.com/slodge/MvvmCross-Tutorials/tree/master/Lib/MvvmCross(或当前在http://slodge.blogspot.co.uk/p/mvvmcross-binaries_7.html上发布的二进制文件)
B。 或继续使用较旧的程序集,但您需要通过测试以下空控件来保护您的get / set方法:
public string JobNumber
{
get { return NumberLabel == null ? null : NumberLabel.Text; }
set { if (NumberLabel == null) return; NumberLabel.Text = value; }
}
对于库中的这一变化感到抱歉 - MvvmCross确实在不断改进,样本/博客文章并不总是赶上来,这可能会导致样本混淆。
如果您选择更新到最新的程序集,那么Swiss Binding语法也将可用,允许您切换:
public const string BindingText = @"{
'JobDescription':{'Path':'Description'},
'JobScheduledForDate':{'Path':'ScheduledForDate'},
'JobNumber':{'Path':'JobNo'}}";
到
public const string BindingText = @"
JobDescription Description;
JobScheduledForDate ScheduledForDate;
JobNumber JobNo";
但这只是一个选项 - 如果您愿意,可以坚持使用JSON。
有关Swiss Binding的更多信息,请参阅http://blog.ostebaronen.dk/2013/01/awesome-mvvmcross-swiss-bindings-for.html