1

尝试了解 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

例外

非常感谢克恩

4

1 回答 1

1

我猜您正在运行旧版本的 MvvmCross 框架二进制文件。

在过去的 4 周中,我们进行了一些关键更改,这些更改延迟了数据绑定的发生,直到单元格和源真正可用于绑定。您可以在 GitHub 上的 Bindable Cell 更改中查看这些更改

有两种可能的修复方法:

A.升级到更新的程序集 - 记录该博客文章时使用的程序集位于https://github.com/slodge/MvvmCross-Tutorials/tree/master/Lib/MvvmCross(或者当前在http:/上发布了二进制文件) /slodge.blogspot.co.uk/p/mvvmcross-binaries_7.html

B. 或者继续使用较旧的程序集,但您需要通过测试 null 控件来保护您的 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。

有关瑞士装订的更多信息,请参阅http://blog.ostebaronen.dk/2013/01/awesome-mvvmcross-swiss-bindings-for.html

于 2013-02-04T08:25:16.670 回答