最新版 |
編集中の文章 |
1行目: |
1行目: |
− | == 実装2:View Base ==
| |
− | [[Xamarin.Mac]]にはNSTableViewSourceというNSTableViewを簡単に扱うための便利クラスがあるようだ。
| |
− |
| |
− | === 列となるデータを準備する ===
| |
− | まずはソースの元(テーブルの1行)となるクラスを用意する。
| |
− | <source lang="csharp">
| |
− | public class Study
| |
− | {
| |
− | public string Id { get; set; }
| |
− | public string Name { get; set; }
| |
− | }
| |
− | </source>
| |
− |
| |
− | === 行となるデータソースを準備する ===
| |
− | 次にデータソースを用意する。
| |
− | NSTableViewSourceクラスを継承してGetRowCountメソッドとGetViewForItemメソッドをオーバーライドすることで利用可能な状態となる。
| |
− | Cellベースでは「GetObjectValue」のところがViewベースでは「GetViewForItem」となっている。
| |
− |
| |
− | この例ではNSTableColumnクラスのIdentifierプロパティの値と、前述のStudyクラスの各プロパティ名の簡易自動マッピングを行っている。NSTableColumnクラスのIdentifierプロパティはInterface Builderで設定した。
| |
− |
| |
− | また、別途IList<>インターフェースを実装しておくとLINQで操作できたり色々便利だった。無くてもよい。
| |
− |
| |
− | <source lang="csharp">
| |
− | public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
| |
− | {
| |
− | if (tableColumn.Identifier == null)
| |
− | {
| |
− | return null;
| |
− | }
| |
− |
| |
− | var item = _items[(int)row];
| |
− | var type = typeof(Study);
| |
− | var prop = type.GetProperty(tableColumn.Identifier, BindingFlags.Public | BindingFlags.Instance);
| |
− | if (prop == null)
| |
− | {// そんな名前のプロパティはない
| |
− | return null;
| |
− | }
| |
− |
| |
− | var val = prop.GetValue(item);
| |
− | if (val == null)
| |
− | {// 空っぽですわ
| |
− | return null;
| |
− | }
| |
− |
| |
− | switch (tableColumn.Identifier)
| |
− | {
| |
− |
| |
− | // CellベースではNSStringを返せばよかったが、ViewベースではNSView派生クラスを返さねばならない。
| |
− | // NSTableCellViewを返すとCellベースと同じような使用感となる。
| |
− | // カスタムセルを使用する場合は分岐するとよい。
| |
− | default:
| |
− | var cellView = (NSTableCellView)tableView.MakeView(tableColumn.Identifier, this);
| |
− | cellView.TextField.StringValue = val.ToString();
| |
− | return cellView;
| |
− | }
| |
− |
| |
− | }
| |
− | </source>
| |
− |
| |
− | あとはCellベースと同じ。
| |
− |
| |
| == 実装1:Cell Base == | | == 実装1:Cell Base == |
| [[Xamarin.Mac]]にはNSTableViewSourceというNSTableViewを簡単に扱うための便利クラスがあるようだ。 | | [[Xamarin.Mac]]にはNSTableViewSourceというNSTableViewを簡単に扱うための便利クラスがあるようだ。 |