万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1

    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("押されたよ");})

    すると呼ばれた。