LoginSignup
2
2

More than 5 years have passed since last update.

Xamarinで遊ぶ(5): ダミーデータの表示

Posted at

←前

元々やっていた、「サンプルコードのTaskyを自作する」から寄り道してしまっているので、本題に戻っていきます。
今日は、Taskモデルと管理しているManagerクラスを作ってダミーデータを表示するまでです。

MyTask.cs
using System;

namespace MyTasky.Core
{
    public class MyTask
    {
        public MyTask ()
        {
        }
        public int ID{get;set;}
        public string Name{ get; set; }
        public string Notes{get;set;}
        public bool Done{ get; set; }
    }
}
MyTaskManager

namespace MyTasky.Core
{
    // ADOを使うのは後回し。
    public static class MyTaskManager
    {
        private static IList<MyTask> tasks;
        static  MyTaskManager ()
        {
            tasks = new List<MyTask>();
        }
        public static IList<MyTask> getTasks(){
            return tasks;
        }
        public static void saveTask(MyTask task){
            tasks.Add (task);
        }
    }
}

サンプルコードはADOを使っているけど、まずはメンバ変数に持たせるだけにしました。 インタフェースを意識して書くのはJavaっぽいですね。C#の世界では関数名の頭は「大文字始まり」が作法のようですが、こればっかりはなんとも慣れず、小文字で書き始める事が多いです。
Objective-Cの世界の「先頭大文字は大体クラスの宣言、他は小文字始まり」に慣れてるから、なのですが。

HomeViewController.cs

namespace MyTasky.Screens
{

    public partial class HomeViewController : DialogViewController
    {
        IList<MyTask> tasks;
        public HomeViewController () : base (UITableViewStyle.Grouped, null)
        {
            this.Initialize ();
        }
        public void Initialize(){
            // MyTaskManagerにダミーデータを投入
            foreach (int i in Enumerable.Range(0,100)) {
                MyTask task = new MyTask ();
                task.ID = i;
                task.Name = ""+i;   // 文字列の+演算子を使って、数字を文字にいている。
                MyTaskManager.saveTask (task);
            }
        }

        public override void ViewWillAppear(bool animated ){
            base.ViewWillAppear (animated);
            this.PopulatedTable ();
        }

        private void PopulatedTable(){
            this.tasks = MyTaskManager.getTasks ();
            var rows = from t in this.tasks
                       select new StringElement (t.Name, t.Notes);
            var s = new Section ();
            // var s = new Section (){rows}; という書き方も出来たけどwarningが出た。
            s.AddAll (rows);
            this.Root = new RootElement ("MyTasky"){ s };
        }
    }
}

Listを使おうとしたらSystem.CollectionsやGenericをusingで宣言しておく必要があります。また対応するアセンブリがプロジェクトの「参照」に入っていなければ、これも追加する必要があります。この辺もJavaっぽいです。

文字列の扱いは、+演算子での連結が出来るので、とても楽に作れます。
また、"0〜10までの数字の列挙"は、Enumerable.Range(0,10)で生成できます。

DialogViewControllerはUITableViewControllerを継承しているので、各タイミングで呼ばれるメソッド viewWillAppear等はそのままoverrideして書き換える事が出来ます。
大きく違うのは、表示するセクションやセルの情報を、Rootというメンバ変数に格納している点。なので、UITableViewControllerのように、"何行あるのか"とか"そのセルの高さは"とか"UITableViewCellのインスタンスを返す"とか、細かな処理(UITableViewDatasourceインタフェースのメソッドで提供していた事)をさっくり省略する事が出来るので、ソースがかなりすっきり出来るのが良いところです。設定画面やモック作成等では大活躍しそうです。
ただし、表示するデータの量(行数)が多いほど、この仕組みはパフォーマンスに影響が出てくると思います。なので、行数が増えたりUIを凝ったりしてパフォーマンスが悪化した時には、DialogViewControllerではなくUITableViewController等に書き換える時が来るかもしれません。

ここまでのソース

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2