{"id":6720,"date":"2014-12-02T10:37:08","date_gmt":"2014-12-01T16:37:08","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/?p=6720"},"modified":"2014-12-02T10:40:15","modified_gmt":"2014-12-02T01:40:15","slug":"xamarin-iosmvvmcross-%e3%82%92-vb-%e3%81%a7%e4%bd%9c%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.moonmile.net\/blog\/archives\/6720","title":{"rendered":"Xamarin.iOS+MvvmCross \u3092 VB \u3067\u4f5c\u308b"},"content":{"rendered":"<blockquote class=\"twitter-tweet\" lang=\"ja\"><p><a href=\"https:\/\/twitter.com\/yusuke_kokubo\">@yusuke_kokubo<\/a> \u305d\u3093\u306a\u3053\u3068\u306f\u306a\u3044\u3067\u3059\u3088\uff1fF#\u3082\u4f7f\u3048\u307e\u3059\u3002<\/p>\n<p>\u2014 Open\u3086\u3068\u308a?( \u30fb?\u30fb)? ?? (@megascus) <a href=\"https:\/\/twitter.com\/megascus\/status\/539414026875199489\">2014, 12\u6708 1<\/a><\/p><\/blockquote>\n<p><script src=\"\/\/platform.twitter.com\/widgets.js\" async=\"\" charset=\"utf-8\"><\/script><\/p>\n<p>\u3053\u308c\u306b\u300cVB \u3067\u3082\u4f5c\u308c\u307e\u3059\u3088\u300d\u306e\u8fd4\u7b54\u3092\u3057\u305f\u3044\u3060\u3051\u306b\u3001Xamarin.iOS \u3067 VB \u3092\u4f7f\u3063\u3066\u307f\u307e\u3057\u305f\u3002\u307e\u3042\u3001\u6b63\u78ba\u306b\u306f\u3001<\/p>\n<ul>\n<li>ViewModel \u3092 VB \u306e PCL \u3067\u4f5c\u308b<\/li>\n<li>\u30d5\u30ed\u30f3\u30c8\u3092 Xamarin.iOS \u306e C# \u3067\u4f5c\u308b<\/li>\n<\/ul>\n<p>\u8a33\u3067\u3001\u30a2\u30d7\u30ea\u5168\u4f53\u3092 VB \u3067\u306f\u4f5c\u3063\u3066\u306f\u3044\u307e\u305b\u3093\u304c\u3002F# \u306e\u5834\u5408\u3001\u30a2\u30d7\u30ea\u5168\u4f53\u3082\u4f5c\u308c\u308b\u306e\u3067\u3001\u306a\u3093\u3068\u304b\u5de5\u592b\u3059\u308c\u3070 VB \u3067\u3082\u4f5c\u308c\u308b\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u3001View \u90e8\u5206\u3092\u30b3\u30fc\u30c9\u3067\u66f8\u304b\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u3057\u3001\u7d50\u69cb\u9762\u5012\u306a\u3053\u3068\u306b\u306a\u308b\u306e\u3067\u3001VB+C# \u306e\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u578b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002Xamarin + Microsoft \u304c C# \u62bc\u3057\u3092\u3057\u3066\u3044\u308b\uff08\u3088\u3046\u306b\u898b\u3048\u308b\u306e\u306f\uff09\u5358\u4e00\u8a00\u8a9e\u3067\u540c\u4e00\u306e .NET Framework\uff08One.NET\uff09\u3067\u4f7f\u3048\u308b\u3088\uff5e\u3001\u3068\u3044\u3046\u610f\u5473\u3067\u3001\u5165\u308a\u53e3\u306e\u53d6\u308a\u65b9\u3068\u3057\u3066\u306f Java \u3068\u4f3c\u3066\u3044\u308b\u304b\u306a\u3068\u3002\u591a\u69d8\u6027\u3068\u3044\u3046\u70b9\u3067\u306f\u3001C#\/VB\/F# \u3068\u63c3\u3063\u3066\u3044\u305f\u307b\u3046\u304c\u3044\u3044\u3057\u3001Visual Basic \u306b\u306f C# \u306e\u5f8c\u8ffd\u3044\u3058\u3083\u306a\u304f\u3066\u521d\u5fc3\u306e\u300c\u521d\u5fc3\u8005\u306b\u3082\u4f7f\u3048\u308b\u300d\u3092\u62bc\u3057\u3066\u307b\u3057\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3002\u3053\u306e\u8a71\u306f\u5225\u9014\u66f8\u304f\u3064\u3082\u308a\u3002<\/p>\n<h2>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306f C# \u306e\u307e\u307e<\/h2>\n<p>Xamarin.iOS+MvvmCross\u3067storyboard\u3092\u4f7f\u3046\u65b9\u6cd5\uff08MvvmCross v3.2.2 \u5bfe\u5fdc\uff09 | Moonmile Solutions Blog<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/archives\/6685\">http:\/\/www.moonmile.net\/blog\/archives\/6685<\/a><\/p>\n<p>\u3067\u4f5c\u3063\u305f\u3082\u306e\u3092\u6d41\u7528\u3057\u307e\u3059\u3002\u3067\u304d\u308c\u3070\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u53c2\u7167\u8a2d\u5b9a\u3060\u3051\u3092 VB \u306e PCL \u306b\u5909\u3048\u308c\u3070\u3044\u3044\u306e\u3067\u3059\u304c\u3001\u6700\u521d\u304b\u3089\u4f5c\u3063\u305f\u306e\u3067\u3044\u304f\u3064\u304b\u5d4c\u308a\u307e\u3057\u305f\uff08\u6c57\uff09\u3002<\/p>\n<p>storyboard \u30d5\u30a1\u30a4\u30eb\u3092\u3001C# \u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30b3\u30d4\u30fc\u3057\u305f\u3082\u306e\u306e\u3001Main Interface \u306b\u8a2d\u5b9a\u3059\u308b\u306e\u3092\u5fd8\u308c\u3066\u3044\u3066\u3001\u753b\u9762\u304c\u771f\u3063\u9ed2\u306b\u306a\u3063\u3066\u3042\u308c\uff1f\u3068\u60a9\u3093\u3060\u308a\u3001<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_01org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_01thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>Xamarin.iOS \u304c 64bit \u5316\u306e\u904e\u6e21\u671f\u306a\u306e\u3067\u3001MvvmCross \u304c monotouch \u3092\u8981\u6c42\u3059\u308b\u306e\u3067 Xamarin.iOS \u3068\u5dee\u3057\u63db\u3048\u305f\u308a\u3068\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_02org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_02thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u3055\u3063\u304f\u308a 30 \u5206\u3067\u4f5c\u3063\u3066\u8fd4\u7b54\u3059\u308b\u3064\u3082\u308a\u304c\u3001\u591c\u4e2d\u306b2\u6642\u9593\u307b\u3069\u304b\u304b\u3063\u3066\u3044\u307e\u3057\u305f\u3088\u3002<\/p>\n<h2>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092 VB \u3067\u4f5c\u308b<\/h2>\n<p>ViewModel \u3092 VB \u306e PCL \u3067\u4f5c\u308a\u307e\u3059\u3002Xamarin Studio \u3067\u306f\u5b8c\u7d50\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u3053\u3067\u306f Visual Studio \u3092\u4f7f\u3044\u307e\u3059\u3002\u307e\u3042\u3001\u3082\u3068\u3082\u3068 Windows \u7248\u306e Xamarin Studio \u3067\u306f Xamarin.iOS \u306e\u958b\u767a\u304c\u3067\u304d\u306a\u3044\u306e\u3067\u3001Mac \u4e0a\u306e\u3082\u306e\u3092\u4f7f\u3046\u306e\u3067\u3059\u304c\u3001\u3053\u306e\u3042\u305f\u308a\u306f\u3001\u9069\u5f53\u306b\u4f7f\u3044\u6163\u308c\u305f\u307b\u3046\u3092\u30d9\u30fc\u30b9\u306b\u3059\u308b\u306e\u304c\u826f\u3044\u304b\u3068\u3002<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nNamespace ViewModels\r\n    Public Interface ICaluculation\r\n        Function TipAmount(subTotal As Double, generosity As Integer) As Double\r\n    End Interface\r\n\r\n    Public Class Calculation\r\n        Implements ICaluculation\r\n\r\n        Public Function TipAmount(subTotal As Double, generosity As Integer) As Double Implements ICaluculation.TipAmount\r\n            Return subTotal * CType(generosity, Double) \/ 100.0\r\n        End Function\r\n    End Class\r\n\r\n    Public Class TipViewModel\r\n        Inherits MvxViewModel\r\n\r\n        Private _calculation As ICaluculation\r\n        Public Sub New()\r\n            _calculation = New Calculation()\r\n            Start()\r\n        End Sub\r\n\r\n        Public Overloads Sub Start()\r\n            _subTotal = 100.0\r\n            _generosity = 10\r\n            Me.Recalcuate()\r\n            MyBase.Start()\r\n        End Sub\r\n\r\n        Private _subTotal As Double\r\n        Private _generosity As Integer\r\n        Private _tip As Double\r\n\r\n        Public Property SubTotal As Double\r\n            Get\r\n                Return _subTotal\r\n            End Get\r\n            Set(value As Double)\r\n                _subTotal = value\r\n                RaisePropertyChanged(Function() SubTotal)\r\n                Recalcuate()\r\n            End Set\r\n        End Property\r\n\r\n        Public Property Generosity As Integer\r\n            Get\r\n                Return _generosity\r\n            End Get\r\n            Set(value As Integer)\r\n                _generosity = value\r\n                RaisePropertyChanged(Function() Generosity)\r\n                Recalcuate()\r\n            End Set\r\n        End Property\r\n\r\n        Public Property Tip As Double\r\n            Get\r\n                Return _tip\r\n            End Get\r\n            Set(value As Double)\r\n                _tip = value\r\n                RaisePropertyChanged(Function() Tip)\r\n            End Set\r\n        End Property\r\n\r\n        Private Sub Recalcuate()\r\n            Tip = _calculation.TipAmount(SubTotal, Generosity)\r\n        End Sub\r\n    End Class\r\nEnd Namespace\r\n<\/pre>\n<p>RaisePropertyChanged \u30e1\u30bd\u30c3\u30c9\u306b\u5f15\u304d\u6e21\u3059\u30e9\u30e0\u30c0\u5f0f\u306e\u66f8\u304d\u65b9\u3092\u3061\u3087\u3063\u3068\u60a9\u307f\u307e\u3059\u304c\u3001Function() SubTotal \u306a\u611f\u3058\u66f8\u304d\u307e\u3059\u3002\u5f0f\u6728\u306b\u306a\u308b\u306e\u3067\u3001Function() &#8230; End Fuction \u3067\u306f\u30c0\u30e1\u306a\u306e\u3067\u3059\u306d\u3002\u7d20\u76f4\u306b\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\u3092\u6587\u5b57\u5217\u3067\u66f8\u3044\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n<p>\u4f8b\u306b\u3088\u3063\u3066\u3001App \u30af\u30e9\u30b9\u306e\u4e2d\u8eab\u306f\u7a7a\u3063\u307d\u3067\u3059\u3002<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nPublic Class App\r\n    Inherits MvxApplication\r\n    Public Sub New()\r\n\r\n    End Sub\r\nEnd Class\r\n<\/pre>\n<h2>\u5b9f\u884c\u3059\u308b<\/h2>\n<p>iOS \u306f\u3053\u3093\u306a\u611f\u3058<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_03org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_03thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>Android \u306f\u3053\u3093\u306a\u611f\u3058<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_04org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/12\/wpid-dworkblogimage20141202_04thum.jpg\" border=\"0\" \/><\/a><\/p>\n<h2>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/h2>\n<p>MxSingleApp \u5185\u306e MvxVB.* \u306e\u985e\u304c\u305d\u308c\u3067\u3059<br \/>\n<a href=\"https:\/\/github.com\/moonmile\/MxSingleApp\">https:\/\/github.com\/moonmile\/MxSingleApp<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>@yusuke_kokubo \u305d\u3093\u306a\u3053\u3068\u306f\u306a\u3044\u3067\u3059\u3088\uff1fF#\u3082\u4f7f\u3048\u307e\u3059\u3002 \u2014 Open\u3086\u3068\u308a?( \u30fb?\u30fb)? ?? (@megascus) 2014, 12\u6708 1 \u3053\u308c\u306b\u300cVB \u3067\u3082\u4f5c\u308c\u307e\u3059\u3088\u300d\u306e\u8fd4\u7b54\u3092\u3057\u305f\u3044\u3060\u3051\u306b\u3001Xam &hellip; <a href=\"https:\/\/www.moonmile.net\/blog\/archives\/6720\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[33,62],"tags":[],"class_list":["post-6720","post","type-post","status-publish","format-standard","hentry","category-vb","category-xamarin"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=6720"}],"version-history":[{"count":2,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6720\/revisions"}],"predecessor-version":[{"id":6722,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6720\/revisions\/6722"}],"wp:attachment":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=6720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=6720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=6720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}