MonoTouch Dialog の MvvmCross 実装で DateElement を使用しています。DateTimeElement のメソッド UpdateDetailDisplay(UITableViewCell cell) は、セル パラメータが null になることはないと想定しているため、例外が発生します。
protected override void UpdateDetailDisplay(UITableViewCell cell)
{
if (cell.DetailTextLabel != null)
{
cell.DetailTextLabel.Text = FormatDate(Value);
}
}
このメソッドは、Dialog ビューのセットアップ中に 3 回呼び出されるようです。
DateElement のインスタンスを作成した結果として
バインディングについて
GetCell が呼び出されたときの TableView の構築中。
セル パラメータは、イベント 3 にのみ存在します。
私は何か間違ったことをしていますか、それとも StringElement のようにパラメータが null であることをテストする必要がありますか?
MvxTouchDialogViewController から派生した ViewDidLoad イベントのコードは次のとおりです。
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
this.Root = new RootElement("Sign-Up")
{
new Section()
{
Bind( new EntryElement("Gender:", "required"), "{'Value':{'Path':'Gender','Mode':'TwoWay'}}"),
Bind( new EntryElement("First name:", "required"), "{'Value':{'Path':'FirstName','Mode':'TwoWay'}}"),
Bind( new EntryElement("Last name:", "required"), "{'Value':{'Path':'LastName','Mode':'TwoWay'}}"),
Bind( new EntryElement("Display name:", "required"), "{'Value':{'Path':'DisplayName','Mode':'TwoWay'}}"),
Bind( new EntryElement("Email:", "required"), "{'Value':{'Path':'Email','Mode':'TwoWay'}}"),
Bind( new EntryElement("Confirm email:", "required"), "{'Value':{'Path':'ConfirmEmail','Mode':'TwoWay'}}"),
Bind( new EntryElement("Password:", "required",null,true), "{'Value':{'Path':'Password','Mode':'TwoWay'}}"),
Bind( new EntryElement("Confirm password:", "required", null,true), "{'Value':{'Path':'ConfirmPassword','Mode':'TwoWay'}}"),
Bind (new DateElement("Date of birth", DateTime.Now), "{'Value':{'Path':'DateOfBirth','Mode':'TwoWay'}}")
},
};
}
私は、独自のメソッドを使用して DateElement から独自のクラスを派生させることによってのみ、問題を「回避」できました。
public class MyDateElement : DateElement { public MyDateElement (string caption, DateTime date) : base (caption, date) { }
protected override void UpdateDetailDisplay(UITableViewCell cell)
{
if(cell == null)return;
if (cell.DetailTextLabel != null)
{
cell.DetailTextLabel.Text = FormatDate(Value);
}
}
}