私は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
です:それは私が得る唯一の本当のスタックトレースがこれです、それを引き起こしているものを私に非常に明白ではないのか?この場合、どうすればいいですか?どんな助けでも大歓迎です。
そして、どちらが28行目ですか? –
これは私のコードではなく、スタックトレースはXamarin.Forms.Platform.iOS.ViewCellRendererのUIKitコードを参照しています。 * my *コードで爆発する行は、base.GetCell行です。 –
ああ、ごめんなさい!ほとんどの場合、ViewCellが実際には別のものであるときにViewCellをレンダリングしようとしている可能性があります。これを適用しようとしているセルは何ですか? –