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のバインド可能なセルの変更で確認できます。

考えられる修正は2つあります。

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 に答える