2016-10-17 4 views
1

私はViewModelの最初のアプローチをXamarin.Formsに使用しています。自分のBindable TableViewを作成するプロセスを開始しました(多くの人が想像しています) 。このプロジェクトはうまくいっています。私は既にCellViewModelのタイプに基づいてUIのセルをレンダリングしており、次の段階に 'Disclosure'や 'Checkbox'アクセサリなどの効果をセルに追加したいと考えていました。 iOSのプロジェクトではこれらのことが本当に意味をなさないようになったので、iOS専用のViewCellRendererを探していました。自体は比較的簡単ですiOS XamarinプロジェクトでViewCellRendererを使用するとSystem.InvalidCastExceptionが発生する

public class AccessoryItemCellRenderer : ViewCellRenderer 

を:

は、細胞上の適切なアクセサリを適用するために、私はそうするクラスを作成する必要がありました。これは、XamarinセルのBindingContextをを取り、その後、必要に応じて付属品を適用します。base.GetCell呼び出しが行われますとき、それは私のreusableCellプロパティを結局のところ

var viewModel = item.BindingContext as TableCellViewModel; 

if (viewModel != null) 
     { 
      UITableViewCell cell = base.GetCell(item, reusableCell, tv); 

      if (viewModel.Accessories == CellIndicators.Disclosure) 
       cell.Accessory = UIKit.UITableViewCellAccessory.DisclosureIndicator; 
      else if (viewModel.Accessories == CellIndicators.DisclosureDetail) 
       cell.Accessory = UIKit.UITableViewCellAccessory.DetailDisclosureButton; 
      else if (viewModel.Accessories == CellIndicators.Detail) 
       cell.Accessory = UIKit.UITableViewCellAccessory.DetailButton; 
      else if (viewModel.Accessories == CellIndicators.CheckMark) 
       cell.Accessory = UIKit.UITableViewCellAccessory.Checkmark; 
     } 

は、少なくとも私は、それは簡単だと思ったnullで、これは私がと仮定してが原因でSystem.InvalidCastExceptionが発生し、それが爆発します。何とか私のセルは、再利用可能なIDを持っていないので、それは

at Xamarin.Forms.Platform.iOS.ViewCellRenderer.GetCell (Xamarin.Forms.Cell item, UIKit.UITableViewCell reusableCell, UIKit.UITableView tv) [0x00000] in C:\BuildAgent2\work\aad494dc9bc9783\Xamarin.Forms.Platform.iOS\Cells\ViewCellRenderer.cs:28 

です:それは私が得る唯一の本当のスタックトレースがこれです、それを引き起こしているものを私に非常に明白ではないのか?この場合、どうすればいいですか?どんな助けでも大歓迎です。

+0

そして、どちらが28行目ですか? –

+0

これは私のコードではなく、スタックトレースはXamarin.Forms.Platform.iOS.ViewCellRendererのUIKitコードを参照しています。 * my *コードで爆発する行は、base.GetCell行です。 –

+1

ああ、ごめんなさい!ほとんどの場合、ViewCellが実際には別のものであるときにViewCellをレンダリングしようとしている可能性があります。これを適用しようとしているセルは何ですか? –

答えて

1

コメントでは、このAccessoryItemCellRendererをTextCellに登録していると言います。 AccessoryItemCellRendererでは、ViewCell用のViewCellRendererを継承しています。 TextCellはViewCellを継承せず、ViewCellとしてキャストできません。例外が発生している場所である可能性が最も高いです。

+0

あなたはイーグルアイズ、良いスポットを持っているうわー!右上のお金。私はViewCellRendererから継承したすべてのセルレンダラーを想定していました(私はこのケースでカスタムセルを使用した例に従っていました)。ありがとうございました! –

関連する問題