「Xamarin.MacのNSTableViewでNSTableViewSourceを使う」の版間の差分
| 127行目: | 127行目: | ||
***NSTextFieldCell | ***NSTextFieldCell | ||
次にデータソースの以下のShouldEditTableColumnメソッドをオーバーライドし「true」を返すようにする。 | |||
前述のEditableのチェックをしておくことでこのメソッドが呼ばれるようになり、このメソッドでtrueを返すと実際に編集が可能な状態となるようだ。 | 前述のEditableのチェックをしておくことでこのメソッドが呼ばれるようになり、このメソッドでtrueを返すと実際に編集が可能な状態となるようだ。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
| 138行目: | 138行目: | ||
return true; | return true; | ||
} | } | ||
} | |||
</source> | |||
上記のShouldEditTableColumnメソッドのみでは編集はできるが、編集終了後に値が反映されず、編集前の状態に戻ってしまう。 | |||
そこで以下のSetObjectValueメソッドもオーバーライドする。 | |||
<source lang="csharp"> | |||
public class StudyTableViewSource : NSTableViewSource, IList<Study> | |||
{ | |||
// 〜〜〜省略〜〜〜 | |||
public override void SetObjectValue(NSTableView tableView, NSObject theObject, NSTableColumn tableColumn, int row) | |||
{ | |||
var item = Items[row]; | |||
var type = typeof(Study); | |||
var prop = type.GetProperty(tableColumn.Identifier, BindingFlags.Public | BindingFlags.Instance); | |||
if (prop == null) | |||
{ | |||
return; | |||
} | |||
prop.SetValue(item, theObject.ToString()); | |||
} | |||
} | |||
</source> | </source> | ||