私は簡単なクラスを持っています
public class Colora
{
public Colora()
{
Created = DateTime.Now;
}
public string Name { get; set; }
public DateTime Created { get; set; }
}
シンプルである必要があります (PCL にあります)。CollectionView に表示できるように、これを KVC 準拠の NSObject に変換するにはどうすればよいですか?
みたいなことを考えていた
List<Colora> coloras = new List<Colora> () {
new Colora() { Name = "Red" },
new Colora() { Name = "Blue" }
};
var objs = new NSObject[coloras.Count];
for (int i = 0; i < coloras.Count; i++) {
objs [i] = NSObject.FromObject (coloras [i]);
}
devCollectionView.Content = objs;
しかし、FromObject は私のクラスでは機能しません。この場合、配列は変更可能である必要はありません。
アップデート。驚くべきことに、これは機能します
public class ColoraViewModel : NSObject
{
private readonly Colora _colora;
public ColoraViewModel (Colora colora)
{
_colora = colora;
}
[Export("name")]
public string Name {
get { return _colora.Name; }
set {
if (_colora.Name != value) {
_colora.Name = value;
}
}
}
}
と
List<Colora> coloras = new List<Colora> () {
new Colora() { Name = "Red" },
new Colora() { Name = "Blue" }
};
var objs = new NSObject[coloras.Count];
for (int i = 0; i < coloras.Count; i++) {
objs [i] = new ColoraViewModel (coloras [i]);
}
devCollectionView.Content = objs;
ただし、新しい ViewModel を作成せずに KVC を作成する一般的な方法をまだ探しています。
これはうまくいきませんが、私は次のようなことを夢見ています:
public class KVCObject : NSObject
{
private readonly object _t;
private readonly Type _type;
public KVCObject (object t)
{
_t = t;
_type = t.GetType();
}
public override void SetValueForKey (NSObject value, NSString key)
{
var info = _type.GetProperty (key.ToString ());
info.SetValue (_t, value);
}
public override NSObject ValueForKey (NSString key)
{
var info = _type.GetProperty (key.ToString ());
return NSObject.FromObject(info.GetValue (_t));
}
}