「Xamarin.MacのNSTableViewでNSTableViewSourceを使う」の版間の差分

127行目: 127行目:
***NSTextFieldCell
***NSTextFieldCell


次にデータソースの以下のメソッドをオーバーライドし「true」を返すようにする。
次にデータソースの以下の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>