「Xamarin.MacのNSTableViewでNSTableViewSourceを使う」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
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を簡単に扱うための便利クラスがあるようだ。

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: