2013-02-04 4 views
1

Essayer d'en savoir plus sur mvvmcross et éditeur de xib - j'ai suivi exemple de code deaide mvvmcross databinding nécessaire

http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html

et incorporé quelques-uns dans mon code.

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; 
     } 
    } 
} 

}

Je ne peux pas obtenir ce travail avec l'erreur suivante jeté - Semble points ne sont pas créés?

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 

exception

Un grand merci Kern

Répondre

1

Je suppose que vous utilisez une ancienne version des binaires cadres MvvmCross.

Nous avons apporté quelques modifications clés au cours des 4 dernières semaines qui retardent la liaison de données jusqu'à ce que la cellule et la source soient réellement disponibles pour la liaison. Vous pouvez voir ces changements à Bindable Cell changes on GitHub

Il y a deux solutions possibles:

A. Mise à jour des assemblées les plus récentes - celles utilisées lors de l'enregistrement ce poste de blog sont en https://github.com/slodge/MvvmCross-Tutorials/tree/master/Lib/MvvmCross (ou il y a des binaires libérés actuellement http://slodge.blogspot.co.uk/p/mvvmcross-binaries_7.html)

B.OU garder sur les ensembles anciens, mais vous devez protéger vos méthodes get/set en testant pour les contrôles nuls comme:

public string JobNumber 
{ 
    get { return NumberLabel == null ? null : NumberLabel.Text; } 
    set { if (NumberLabel == null) return; NumberLabel.Text = value; } 
} 

Désolé pour ce changement dans les bibliothèques - MvvmCross ne cesse de s'améliorer, les messages de l'échantillon/blog ne rattrapent pas toujours et cela peut causer de la confusion dans les échantillons.


Si vous choisissez de mettre à jour les dernières assemblées, alors la syntaxe de liaison suisse sera également disponible, vous permettant de passer:

public const string BindingText = @"{ 
    'JobDescription':{'Path':'Description'}, 
    'JobScheduledForDate':{'Path':'ScheduledForDate'}, 
    'JobNumber':{'Path':'JobNo'}}"; 

à

public const string BindingText = @" 
    JobDescription Description; 
    JobScheduledForDate ScheduledForDate; 
    JobNumber JobNo"; 

mais cela est seulement une option - vous pouvez coller avec JSON si vous préférez.

Pour en savoir plus sur la liaison suisse, voir http://blog.ostebaronen.dk/2013/01/awesome-mvvmcross-swiss-bindings-for.html

+0

binaires mis à jour, passé à RegisterNibForCellReuse() et en riant. Merci Stuart - cadre génial. – Kern