У меня возникают значительные проблемы с использованием Xamarin.iOS.C# Xamarin - привязка данных к UICollectionViewCell с использованием SetValueForKey
Я пришел из веб-фона MVC5 и часто привязывал данные к элементам DOM (например, с атрибутами JS data-
). Я хочу добиться аналогичной картины в Xamarin.iOS.
Из того, что я собираю в документации Xamarin (которая всегда кажется основанной на устаревших версиях фреймворка), мне нужно привязать данные (но не отображать их) к UICollectionViewCell
с использованием шаблона KVC.
Это лучший метод вызова SetValueForKey(NSObject object, NString key)
в моем методе UpdateCell (ПРИМЕЧАНИЕ: Я изменил Params порождающим):
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 (опять же, не это настоящее имя, но для иллюстрации)
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 с использованием связанных данных.
Причина этого? Ну, я хочу, чтобы свойство MyClass «Name» отображалось на метке UICollectionViewCell
, а «Id» - для вызова REST, но не отображался для пользователя. В настоящее время на этикетке появляется TapGesture, но я не могу получить значение для myClassObject.Id и, следовательно, не могу сделать веб-звонок!
UITapGestureRecognizer
подключается к UICollectionView
в моем UICollectionViewController
- код не требуется для охвата вопроса) и corrently запускает событие, но требует, чтобы значение для ключа «BoundMyClassObject» или myClassObject.Id для POST в формате JSON ...
Имеют смысл?
Пожалуйста, помогите мне, поскольку в документации и форумах Xamarin имеется очень мало информации.
Все самое лучшее,
Джон
EDIT
Как @AdamKemp указывает в пост здесь SetValueForKey
предназначается для NSObject
с.
Так я переработан код в MyClass.cs
следующим
[Register ("MyClass)] общественный класс Мой класс: 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
}
Однако, когда я звоните SetValueForKey
в моем UpdateCell
метод
MyClass myClassObject = newMyClass(7); // int passed to constructor for illustration in my real code it's dynamic
this.SetValueForKey(myClassObject, "MyClassObject");
я сталкиваюсь следующее сообщение об ошибке
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.