今日、昨日と両日もくもく会に参加してました。
JXUG東京もくもく会と、業務系システム開発勉強会でもくもくしていました。
どっちもXamarinでもくもくしました。一応それらの進展を。
ListViewにViewModelをバインドしようというお話。
まずは参考
ListView Data Sources - Xamarin
ソース
まぁなんてことはない、普通のListViewバインディングです。
ViewModelとListViewのバインディングはかなり簡単に行えます。
//今回は初期ViewModelのデータをつっこんでおく var searchInfo = new ObservableCollection<SearchInfo> { new SearchInfo { Detail = "高橋 慶太郎", SearchType = ComicTokutenEnum.SearchType.AuthorSearch}, new SearchInfo { Detail = "弐瓶 勉", SearchType = ComicTokutenEnum.SearchType.AuthorSearch}, new SearchInfo { Detail = "Pumpkin Scissors", SearchType = ComicTokutenEnum.SearchType.TitleSearch}, new SearchInfo { Detail = "メイドインアビス", SearchType = ComicTokutenEnum.SearchType.TitleSearch} }; //データバインド this.BindingContext = searchInfo;
実行結果
トグルの画面が崩れるのはエミュレータゆえなのかなぁ?
ModernHttpClient + HtmlAgilityPack
XamarinでWebページを解析しよう!というお話。
こちらも比較的簡単に実現できました。
まずは参考
Xamarin のプロジェクトで NuGet を使用する : XLsoft エクセルソフト
ModernHttpClient
Nativeに依存しないWeb通信が可能となる。
NugetでGet可能。
HtmlAgilityPack
.NetのHTMLパーサーの定番。
NuGetの取得だけでも使用できるようになっているようです。
処理。
"@CH3COOHさんの処理内容にModernHttpClientの使用を追加した感じです。
ほぼ同内容の処理は下コードな感じになりました。 (パース部分はちょっと手抜きしてますけど)
・ソース
//画面EntryからCode値を取得 var code = CompanyId.Text; var urlstring = string.Format("http://stocks.finance.yahoo.co.jp/stocks/detail/?code={0}", code); var httpClient = new HttpClient(new NativeMessageHandler()); var response = await httpClient.GetAsync(urlstring); //html取得 var html = await response.Content.ReadAsStringAsync(); //AgilityPackにぶっこみ var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); //解析解析 var priceNode = doc.DocumentNode.Descendants("td") .Single(node => node.GetAttributeValue("class", "") == "stoksPrice"); var companyNode = doc.DocumentNode.Descendants("th") .Single(node => node.GetAttributeValue("class", "") == "symbol"); //表示 this.Outputlabel.Text = string.Format("{0}({1})の株価: {2}円", companyNode.InnerText, CompanyId.Text, priceNode.InnerHtml);
実行結果
後回しにしたこと
XMLの解析をしてみたかったのだけど、Amazonが提供しているサンプル
SignedRequestHelperがSystem.Webをバリバリ使っているんで
結構書き直さなきゃいけない印章。
もくもく会中にViewに表示できるなにかを作りたかったので
後に回しました(時間が余って作業したけど結局Amazonのは終わらなかった…)
最後に
もくもく会楽しかったのでまた参加したいです。