FlexGrid には、セルのコンテンツを完全に制御できる formatItem プロパティがあります。UIView クラスと GridCellType 列挙を追加することで各列をカスタマイズでき、セルコンテンツをコード内で完全にカスタマイズできます。
次の図は、パフォーマンスを表すセルテンプレートとして C1Gauge を設定したときの FlexGrid を示しています。
次のコード例は、FlexGrid コントロールにカスタムセル内容を追加する方法を示します。例では、「クイックスタート」セクションで作成したサンプルを使用します。
CS |
コードのコピー
|
---|---|
public partial class ViewController : UIViewController { public ViewController(IntPtr handle) : base(handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); // ビューを読み込んだ後の追加セットアップを行います(通常は nib から)。 Grid.AutoGenerateColumns = false; Grid.Columns.Add(new GridRadialGaugeColumn() { Binding = "OrderTotal", Header = "注文合計", Width = GridLength.Star }); Grid.Columns.Add(new GridColumn() { Binding = "FirstName", Width = GridLength.Star }); Grid.Columns.Add(new GridColumn() { Binding = "LastName", Width = GridLength.Star }); var data = Customer.GetCustomerList(100); Grid.ItemsSource = data; } public class GridRadialGaugeColumn : GridColumn { protected override object GetCellContentType(GridCellType cellType) { if (cellType == GridCellType.Cell) { return typeof(C1BulletGraph); } else { return base.GetCellContentType(cellType); } } protected override UIView CreateCellContent(GridCellType cellType, object cellContentType) { if (cellType == GridCellType.Cell) { var gauge = new C1BulletGraph(); gauge.Max = 10000; gauge.Target = 7000; gauge.Bad = 1000; gauge.Good = 6000; return gauge; } else { return base.CreateCellContent(cellType, cellContentType); } } protected override void BindCellContent(UIView cellContent, GridCellType cellType, GridRow row) { if (cellType == GridCellType.Cell) { var gauge = cellContent as C1BulletGraph; gauge.Value = (double)GetCellValue(cellType, row); } else { base.BindCellContent(cellContent, cellType, row); } } } public override void DidReceiveMemoryWarning() { base.DidReceiveMemoryWarning(); // 使用されていないキャッシュされたデータ、イメージなどを解放します } } |