Xamarin.iOSを使用する際に重大な問題が発生しています。C#Xamarin - SetValueForKeyを使用してUICollectionViewCellにデータをバインドする
私はMVC5のWeb背景から来ており、DOM要素にデータをバインドすることがよくあります(JS data-
属性など)。私はXamarin.iOSで同様のパターンを達成したい。
私はXamarinのドキュメント(いつも古いバージョンのフレームワークに基づいているようです)から収集したものを、KVCパターンを使用してUICollectionViewCell
にバインドする必要があります。
public class MyClassCollectionViewCell : UICollectionViewCell
{
[Outlet]
UILabel NameLabel { get; set; }
public BaseCell (IntPtr handle) : base (handle)
{
this.NameLabel = new UILabel();
}
public virtual void UpdateCell(MyClass myClassObject)
{
// Display the "Name" within the UILabel outlet
this.NameLabel.Text = myClassObject.Name;
// This being my custom cell which inherits from UICollectionViewCell
this.SetValueForKey(myClassObject, "BoundMyClassObject");
// remainder omitted for brevity
}
}
とMyClass.cs(再び、それは本当の名前だが、説明のためではない)
:は私てupdateCellメソッド内SetValueForKey(NSObject object, NString key)
(:私は一般的なことのparamsを変更した注)を呼び出す最善の方法であり、
public class MyClass
{
[JsonProperty("Id")]
public int Id { get; set; }
[JsonProperty("Name")]
public string Name { get; set; }
// more props omitted for brevity
}
は私がバインドしようとしているオブジェクトがNSObject
から継承されていないため、SetValueForKey
では動作しないという問題です。
オブジェクトをセルにバインドし、セルをタップし、セルにバインドされたデータを取得し、最後にバインドされたデータを使用してRESTコールを作成したいと考えています。
これはなぜですか?さて、私は、 "Name" MyClassプロパティがUICollectionViewCell
のラベルに表示され、 "Id"がREST呼び出しのためにアクセス可能で、ユーザーには表示されないようにします。現在、ラベルはTapGestureが動作するように見えますが、myClassObject.Idの値を取得することができないため、Web呼び出しを行うことはできません!
UITapGestureRecognizer
は私のUICollectionViewController
内UICollectionView
まで配線されている - 質問のスコープのために必要でないコード)とcorrently ...
意味がありますか?
Xamarinのドキュメントやフォーラムにはほとんど情報がありませんので、私を助けてください。
すべてのベストは、ここの記事で出
ジョン
EDIT
@AdamKempとしてポイントがSetValueForKey
はNSObject
のためのものです。
を次のようにだから私は[登録( "MyClassの)] パブリッククラス私のクラスMyClass.cs
でコードをリファクタリング:NSObjectの { 公共のMyClass(){}
public MyClass(int ID)
{
this.Id = ID;
}
private int _Id = 0;
[Export("Id")]
public int Id
{
get
{
return _Id;
}
set
{
WillChangeValue("Id");
_Id = value;
DidChangeValue("Id");
}
}
// same for Name property
}
しかし、I電話番号SetValueForKey
私のUpdateCell
MyClass myClassObject = newMyClass(7); // int passed to constructor for illustration in my real code it's dynamic
this.SetValueForKey(myClassObject, "MyClassObject");
私は私UICollectionViewCellクラスに次のプロパティを追加し、次のエラー
Foundation.MonoTouchException: Objective-C exception thrown. Name: NSUnknownKeyException Reason: [<UICollectionViewCell 0x7e433a30> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key MyClassObject.