読者です 読者をやめる 読者になる 読者になる

万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Xamarin のImageCell(DataTemplate)にクリックイベント

http://www.buildinsider.net/mobile/xamarintips/0038

このサイトを参考にしてるが、ImageCellに対してクリックを付けたい。

以下のコードにOnClickをつけようと模索。

        new Group("Woman") {
          new Data {Name = "Rhonda J. Bailey", Phone = "801-617-8209", Icon = "woman.png"},
          new Data {Name = "Elizabeth E. McClellan", Phone = "415-771-0336", Icon = "woman.png"},
        }

以下の部分を見る限りDataのプロパティと"Name"の文字列がマッピングしている。(文字列なのが気に入らないが・・)

      var cell = new DataTemplate(typeof (ImageCell));
      cell.SetBinding(ImageCell.TextProperty, "Name"); 
      cell.SetBinding(ImageCell.DetailProperty, "Phone"); 
      cell.SetBinding(ImageCell.ImageSourceProperty, "Icon");

CommandPropertyが怪しいと思い新たに

cell.SetBinding(ImageCell.CommandProperty, "OnClick");

のようにし、Dataクラスには

   class Data {
      public String Name { get; set; }
      public String Phone { get; set; }
      public String Icon { get; set; }
      public Action OnClick { get; set; } // コレ追加
    }

配列への追加時には、

ar.Add(new Data {Name = "Michael H. White", Phone = "620-625-0916", Icon = "man.png",
OnClick = () => {System.Diagnostics.Debug.WriteLine("押されたよ");}));

とやれば、うまくいくと思ったが、ActionがSystem.Windows.Inputに変換できない警告が出ていた。

AndroidでやってるのでWindowsってのがなんかおかしいが、

[https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml- basics/data_bindings_to_mvvm/#Commanding_with_ViewModels]

を見て、 もしや!?と、

using System.Windows.Input; // コレ追加

   class Data {
      public String Name { get; set; }
      public String Phone { get; set; }
      public String Icon { get; set; }
      public ICommand OnClick { get; set; } // こう変更
    }

さらに以下のように

using Xamarin.Forms; // これはCommandに必須.

// bla bla bla.

ar.Add(new Data {Name = "Michael H. White", Phone = "620-625-0916", Icon = "man.png",
OnClick = new Command(() => {System.Diagnostics.Debug.WriteLine("押されたよ");})

すると呼ばれた。