![泚ç®ãéããç»å](https://habrastorage.org/files/5ef/14b/6c1/5ef14b6c17c546ea807c56c161705371.png)
2013幎ã§ããã 圌ãã¯1ãã«ã§30ã«ãŒãã«ãäžããç§ã¯2GISã§Windows Phoneã§éçºããä»äºãåŸãŸããã ç§ã¯2GISã¢ããªã±ãŒã·ã§ã³ã®ç«ã¡äžãã«åå ããŸãããããã®é ã«ã¯ã»ãŒæºåãã§ããŠããŸãããããŸããªãããŒã±ãããã¬ã€ã¹ã§ãŠãŒã¶ãŒãå©çšã§ããããã«ãªããŸããã
ãã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯è¿·æãªæ©èœã1ã€ãããŸãããããã¯WebAPIã§æ©èœãããããã€ã³ã¿ãŒãããæ¥ç¶ãå¿ èŠã§ããã ãã®ãããã»ãšãã©ããã«ããªãã©ã€ã³ã§äœæ¥ããããã«WPã§2GISãæããå¿ èŠããããŸããã ãããŠåæã«ãä»ã®å·®ãè¿«ã£ãåé¡ã解決ããŸãã
ãã¹ãŠãæžãæããçç±
å€ãã¢ããªã±ãŒã·ã§ã³ã¯ãæè¿å ¬éããããšããäºå®ã«ããããããããŠãŒã¶ãŒãšããžãã¹ã®èŠä»¶ã«ååã«å¯Ÿå¿ããŠããŸããã§ããã èŠä»¶ã¯æ¬¡ã®ããã«ãªããŸããã
é«éããŒã¿é ä¿¡
2GISãããªãã®è¡ã«é¢ããæ°ããæ å ±ãèŠã€ãããšããŸãã ãã®æ å ±ããŠãŒã¶ãŒãšå ±æããããã«ãããã§ãã®ãããªã¢ã¯ã·ã§ã³ãå®è¡ããŸããã
- 圌ãã¯ã¢ããªã±ãŒã·ã§ã³ã«æ°ããããŒã¿ã衚瀺ããããšãæããŸããã
- ãã¹ãŠãã¹ãæžã¿ã
- ã¹ãã¢ã§ã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãå ¬éããŸããã
- 圌ãã¯éœåžã®ããŒã¿æŽæ°ããªãªãŒã¹ããŸããã
ãã®åŸãã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãããŠã³ããŒãããæçµçã«æå¯ãã®ç髪åºã§ã²ãããšããã®ã«ãããè²»çšãããããŸããã ããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ç®¡çãäºææ§ããã®ä»ãã¹ãŠã®åé¡ã«ã€ããŠè©±ããŠããããã§ã¯ãããŸããã é«éããŒã¿é ä¿¡ãšã¯ããã®ããã»ã¹ãããã€ã³ã1ã3ãå®å šã«é€å€ããŠãã²ãã®ææè ãå°ã幞ãã«ããããšã§ãã
æ°æ©èœã®æ¥éãªåºçŸ
ããè¯ããããéãæ€çŽ¢ããæ°ããæ€çŽ¢ã¢ã«ãŽãªãºã ãèããŠã¿ãŸãããã Windows PhoneããŒã ã®å€å€§ãªäººä»¶è²»ãªãã§ããã®ã¢ã«ãŽãªãºã ã補åã«è¡šç€ºãããã£ãã®ã§ãã
ãªãã©ã€ã³
åã«ãèšã£ãããã«ã以åã®ããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ã€ã³ã¿ãŒããããå¿ èŠã§ããã
![è©äŸ¡ã®æªãåç](https://habrastorage.org/files/603/fca/655/603fca655cfa4df298af8f422ebadca4.png)
ããã¯äžéšã®ãŠãŒã¶ãŒã«ãšã£ãŠå°ãã€ã©ã€ã©ãããã®ã§ããããã®ãããWPçšã®æ°ãã2GISã¯ãªãã©ã€ã³ã§åäœããŠããã«éããããŸããã
Windows Phoneã§ã®æ°ãã2GISã®ã¢ãŒããã¯ãã£
ããŠãå°ãããªããããã¬ã³ããªãŒãªããŒã ãåºæ¬çãªèŠä»¶ãæ確ã«ããæ©æã«ã¹ãã¢ã®ææ°ã¬ãã¥ãŒããã®è¯å®çãªãã£ãŒãããã¯ãåãåããéçºãéå§ããŸããã ãã¡ãããæåã®ãã®ã¯ã¢ãŒããã¯ãã£ã§ãã
2GISã§ã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãããªãåããè¡ãããŠãããä»ã®ãã©ãããã©ãŒã ã§ã¯æ¢ã«ããã€ãã®ããŒãžã§ã³ãå€æŽãããŠãããšèšã䟡å€ããããŸãã ã¢ãŒããã¯ãã£ãéçºããéãäŒç€ŸãåŸãçµéšãšäžèšã®èŠä»¶ãèæ ®ããŸããã ããã§äœãèµ·ãã£ãã®ã§ãã
![建ç¯](https://habrastorage.org/files/4af/623/e61/4af623e610bc4c9f917547e5ff300475.png)
ã¯ãã¹ãã©ãããã©ãŒã ã³ã¢
å³ã®äžã®ãããã¯ã¯ããã¹ãŠã®åºç€ã§ããã¯ãã¹ãã©ãããã©ãŒã ã³ã¢ã§ããããã¹ãŠã®ã¢ã«ãŽãªãºã ãšãµãŒãã¹ãžã®ãšã³ããªãã€ã³ãã§ãã ãªãã©ã€ã³ããã¯ãšã³ãã質åãããŠåçãåŸãããšãã§ããŸãã ãã®ããšã¯ããããã¯ãŒã¯ã«æ¥ç¶ããã«äœæ¥ãæäŸããŸãã WPã ãã§ãªããWindowsãOS XãLinuxãiOSãAndroidã§ãæ§ç¯ã§ãããããã¯ãã¹ãã©ãããã©ãŒã ãšåŒãã§ããŸãã
æ°ããæ©èœããã°ããè¿œå ããããã®èŠä»¶ã«åŸã£ãŠã2GISã«è¡šç€ºãããæ°ãããã®ã¯ãã¹ãŠã«ãŒãã«ã«è¡šç€ºãããWPã®æ°ãã2GISã«èªåçã«è¿œå ãããŸãïŒãã®ã«ãŒãã«ã䜿çšãããã¹ãŠã®è£œåãšåæ§ïŒã ã¯ãã¹ãã©ãããã©ãŒã ã«ãŒãã«ã¯ãã¯ãã¹ãã©ãããã©ãŒã ã«ãŒãã«ã®éçºã®ããã®ç¹å¥ãªããŒã ã®éåžžã«åªç§ãªäººã«ãã£ãŠC ++ã§éçºãããŠããŸãã 圌ãã¯çŽ æŽãããã§ãããèšäºã¯ãããã«ã€ããŠã§ã¯ãªããWindows Phoneã«ã€ããŠã§ãããããç§ã¯ãããã«ã€ããŠã¯ãã以äžäœãæžããŸããã
UI
å³ã®äžçªäžã®ãããã¯ã¯UIãããã³ããšã³ãããŠãŒã¶ãŒãäœæ¥ããŠããéšåã§ãã ãã©ãããã©ãŒã ã®ãã€ãã£ãããŒã«ïŒCïŒããã³XAMLïŒã䜿çšããŠéçºããããæ°ã«å ¥ãã®ãã©ãããã©ãŒã ãšã®ããåããæã身è¿ã§ç°¡åã«äœéšã§ããããã«ããŸãã ãã®èšäºã®å·çæç¹ã§ã¯ãéçºè ã¯ãSilverlightã¢ããªã±ãŒã·ã§ã³ãWindows PhoneïŒSilverlightã§ã¯ãããŸããïŒã¢ããªã±ãŒã·ã§ã³ããŠãããŒãµã«ã¢ããªã±ãŒã·ã§ã³ãªã©ãWPã§äœ¿çšã§ããã¢ããªã±ãŒã·ã§ã³ã®çš®é¡ãããã€ããããŸããã ããããæ°ãã2GISã®äœæ¥ãå§ããã°ããã®ãšãã¯ãSilverlightãããªãã£ããããéžæããã®ã¯é©ãããšã§ã¯ãããŸããã
äžéå±€
C ++ããã³CïŒãšåéã«ãªããã«ãŒãã«ãã¢ããªã±ãŒã·ã§ã³ãšéä¿¡ããã¢ããªã±ãŒã·ã§ã³ãã«ãŒãã«ãšéä¿¡ããããã«ããã«ã¯ãC ++ / CXã§èšè¿°ãããWindowsã©ã³ã¿ã€ã ã³ã³ããŒãã³ãã®åœ¢åŒã®äžéå±€ãå¿ èŠã§ãã
OpenGLã®3Dããã
ãªãã©ã€ã³ã«ã€ããŠã®äŒè©±ãç¶ãããšãã€ã³ã¿ãŒãããæ¥ç¶ãªãã§ãæ©èœããåœç€Ÿã®ã«ãŒãã«ã€ããŠèšãããšã¯ã§ããŸããã 2GISã®ãããã¯ãããªãèªèå¯èœãªèŠçŽ ã§ãã 3次å ã®ã¯ãã¹ãã©ãããã©ãŒã ïŒç°ãªãOSã§ã¢ã»ã³ãã«ãããŸãïŒã§ãããOpenGLã§èšè¿°ãããŠããŸãã
æ®å¿µãªãããOpenGLã¯WPã§ã¯ãµããŒããããŠããªããããOpenGLåŒã³åºããDirectXã«å€æããã«ã¯Angleã䜿çšããå¿ èŠããããŸãã ã«ãŒããçµ±åããããšã§ãå€ãã®ããŸããŸãªåé¡ãçºçããŸããããæçµçã«ã¯WPã§ã«ãŒããèµ·åã§ããããšã«æ³šæããŠãã ããã ãã¡ãããAngleã®äœ¿çšã¯ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸããããã®åœ±é¿ãæå°éã«æããããåªããŠããŸãã
ããŒã«
CïŒ/ XAMLã§èšè¿°ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ãšåæ§ã«ãWPã®2GISããã³ããšã³ãã®å éšããã€ã¹å šäœãMVVMãã¿ãŒã³ã«åŸããŸãã
MVVMã䜿çšããããã°ã©ããŒã¯ãé ããæ©ãããäœããã®MVVMãã¬ãŒã ã¯ãŒã¯ã®äœ¿çšãéå§
- ãæ°ã«å ¥ãã®ãã©ãŠã¶ãéããŸãã ããšãã°ãInternet Exporerã
- caliburnmicro.comã«ã¢ã¯ã»ã¹ããŸãã
- Caliburn.MicroãããŠã³ããŒãããã€ã³ã¹ããŒã«ããŠã楜ãã¿ãã ããã
çå£ã«ã2013幎ã«ã¯WP8ã§å®è¡ãããŠããäžè¬çãªMVVMãã¬ãŒã ã¯ãŒã¯ã¯ããŸãå€ããããŸããã§ããã å®éãPrismãMVVM LightãCaliburn.MicroããéžæããŸããã Prismã¯éåžžã«å·šå€§ã§ã倧äŒæ¥åãã«é©ããŠããŸãããMVVM Lightã¯è»œãããŠããã£ãšäœãã欲ããã£ãã§ãã ããããCaliburn.Microã¯æ¬¡ã®çç±ã§ç§ãã¡ãåã°ããŸããã
ããã²ãŒã·ã§ã³ã®ãµããŒã
éåžžãsilverlightã¢ããªã±ãŒã·ã§ã³ã®ããŒãžéã®ããã²ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
NavigationService.Navigate(new Uri("/GroupPage.xaml?name=Administrators", UriKind.Relative));
ããã¯ããŸãçŸãããããŸãããè¡ãå ¥åãããšãã«ééããããã§ãã å ¥åããããŸããã nameãã©ã¡ãŒã¿ãŒèªäœã¯ããã®ãã©ãŒã ã®onNavigatedããŒãžã€ãã³ãå ã§ååŸããå¿ èŠããããŸãã
var name = NavigationContext.QueryString["name"];
Caliburn.Microã§ã¯ã次ã®ããã«åãåé¡ã解決ã§ããŸãã
NavigationService.UriFor<GroupPageViewModel>() .WithParam(x => x.Name, "Administrators") .Navigate();
ã³ãŒãã¯èŠæ ãããããåå¶åŸ¡ããããNameãã©ã¡ãŒã¿ãŒã¯ããã²ãŒã·ã§ã³äžã«å¯Ÿå¿ããViewModelããããã£ã«ããã«æžã蟌ãŸããŸãã
ç¶æ ãµããŒãã®ä¿å
Caliburm.Microã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãç¶æããããã®èå³æ·±ãã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸããŸãã ããšãã°ãGroupPageViewModelã®ç¶æ ä¿åæŠç¥ãå®çŸ©ããã«ã¯ããã®ãããªã¯ã©ã¹ãå®çŸ©ããã ãã§ãã
public class GroupPageViewModelStorage : StorageHandler<GroupPageViewModel> { public override void Configure() { Property(x => x.Name) .InPhoneState() .RestoreAfterActivation(); } }
äžèšã®ã³ãŒãã¯ãéã¢ã¯ãã£ããªç¶æ ã§ã·ã¹ãã ãçªç¶ã¢ããªã±ãŒã·ã§ã³ãã¢ã³ããŒãããå ŽåãGroupPageViewModelã®Nameããããã£ããã®åé¡ãä¹ãè¶ããŠä¿åãããã¢ããªã±ãŒã·ã§ã³ãåã¢ã¯ãã£ãåããããšãã«åŸ©å ãããããšãæå³ããŸãã
ãã€ãã£ãIoCã³ã³ãããŒã®ãµããŒã
Caliburn.Microã®å¿èéšã¯ãäŸåæ§æ³šå ¥ãã¿ãŒã³ãå®è£ ããçµã¿èŸŒã¿ã®IoCã³ã³ãããŒã§ãã ããŒãžéã移åãããšããViewModelsã¯ã³ã³ã¹ãã©ã¯ã¿ãŒ/ããããã£ã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšããŠå¿ èŠãªãã¹ãŠã®ãµãŒãã¹ãååŸããŸããããã¯éåžžã«äŸ¿å©ã§ãã 匷ããå§ãããŸãã
WPã®å Žå-ãããããµããŒã
Caliburn.Microã¯ãåPivotã³ã³ãããŒã«ããŒãžãç¬èªã®åå¥ã®ViewModelãæã€åå¥ã®ãã¥ãŒã«ãªãã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸããŸãã ããã¯éåžžã«äŸ¿å©ã§ãããžãã¯ãå解ã§ããããããã¿ãã®é 延ããŒã¿ã®èªã¿èŸŒã¿ãæ¯èŒçç°¡åã«èšå®ã§ããŸãã
ããŒãžã®ã©ã€ããµã€ã¯ã«ã«é¢é£ä»ããããŠãããã¥ãŒã¢ãã«ã®ç¹å¥ãªæ¹æ³
Screenã¯ã©ã¹-ã»ãšãã©ã®ViewModelsã®åºæ¬ã¯ã©ã¹ã«ã¯ãéåžžã«äŸ¿å©ãªã¡ãœããOnInitializeãOnActivateãOnDeactivateãªã©ããããŸãããããã®ã¡ãœããã¯ãViewModelã€ã³ã¹ã¿ã³ã¹ã®äœææããã³å¯Ÿå¿ããããŒãžãžã®ç§»åæãŸãã¯çµäºæã«ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåŒã³åºãããŸãã ViewModelsã§ãããã®ã¡ãœããããªãŒããŒã©ã€ãããããã§æçšãªã³ãŒããå®è¡ã§ããŸãã
ãªãŒãã³ãœãŒã¹
Caliburn.Microã¯ãªãŒãã³ãœãŒã¹ã§ãã ãã¬ãŒã ã¯ãŒã¯ã«äœãã足ããªãå Žåã¯ããã€ã§ãèªåã§è¿œå ã§ããŸãã
äœãšã³ããªãŒãããå€
Caliburn.Microã䜿ãå§ããã®ã¯ç°¡åã§ãã ããã«ãéåžžã«è»œéã§ãããCaliburn.Microã®ã³ãŒãå šäœã¯1ã2æ¥ã§ç¿åŸããã®ãéåžžã«çŸå®çã§ãã
ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãä¿åãã
Caliburn.Microã§äœ¿çšãããŠããã¢ããªã±ãŒã·ã§ã³ç¶æ ã®æ°žç¶åã¡ã«ããºã ãå€å°æ¹åããããšã¯èšãã«å€ããŸãã ããã©ã«ãã§ã¯ãCaliburnã¯WPã§äœ¿çšãããæšæºã®XMLã·ãªã¢ã«åã¡ã«ããºã ã䜿çšããŸãã SharpSerializerã䜿çšãããã€ããªã·ãªã¢ã«åã®ãµããŒããè¿œå ããŸãã ã 䟿å©ã§è¿ éã«å€æããã»ãšãã©äœã§ãã·ãªã¢ã«åã§ããŸãã
é«éããŒã¿é ä¿¡
ãã®ãããã¯ãã¹ãã©ãããã©ãŒã ã³ã¢ã¯ãæ°ããæ©èœã®è¿ éãªåºçŸãšãªãã©ã€ã³äœæ¥ãå¯èœã«ããŸãããé«éããŒã¿é ä¿¡ã¯ã©ãã§ããããïŒ ã¢ããªã±ãŒã·ã§ã³ããã®ããŒã¿ã«ã€ããŠäœãç¥ããªãå Žåãæ°ããéœåžããŒã¿ã¯ã©ã®ããã«ã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããŸããïŒ
çãã¯ãæ°ããããŒã¿ãšäžç·ã«ããããã衚瀺ããããã«æ°ããUIãé 眮ããå¿ èŠããããšããããšã§ãã ç§ãã¡ã®å Žåããããã¯XAMLãã³ãã¬ãŒãã§ãã éåžžãXAMLãã³ãã¬ãŒãã¯ã¢ããªã±ãŒã·ã§ã³å ã«ååšããé ä¿¡ãããŸãããXAMLãªãœãŒã¹ãã¢ããªã±ãŒã·ã§ã³èªäœãšã¯å¥ã«å®å šã«ç¬ç«ããŠé åžããããšèããŠããŸãã
ä»ã®èª°ããããããã£ãŠãããã©ããã¯ããããŸããããæŠããŠãããã«ã¯çŽ æŽããããã®ã¯ãããŸããã ç§ãã¡ã¯ãã°ããã®éãããŸããŸãªãªãã·ã§ã³ãè©Šããéåžžã«åçŽãªãç§ã®æèŠã§ã¯ãã¹ããŒã ã決å®ããŸããã
ã¢ããªã±ãŒã·ã§ã³ãšã¯å¥ã«ã衚瀺ãããããŒã¿ãé åžãããšããŸãã
{ "data": "Windows Phone" }
ããã§ã¯ç¹å¥ãªããšã¯äœããããŸãã-ããã¯åãªãjsonã§ãã
ãŸãããã®ããŒã¿ã衚瀺ããããã«å¿ èŠãªXAMLãã³ãã¬ãŒããïŒã¢ããªã±ãŒã·ã§ã³ãšã¯å¥ã«ïŒé åžããŸãã
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> <DataTemplate x:Key="TestIcon"> <Path Width="42" Height="41" Stretch="Fill" Fill="{StaticResource PhoneForegroundBrush}" Data="F1 M 17,23L 34,20.7738L 34,37L 17,37L 17,23 ZM 34,55.2262L 17,53L 17,39L 34,39L 34,55.2262 ZM 59,17.5L 59,37L 36,37L 36,20.5119L 59,17.5 ZM 59,58.5L 36,55.4881L 36,39L 59,39L 59,58.5 Z " /> </DataTemplate> <DataTemplate x:Key="EntryPoint"> <StackPanel> <ContentPresenter ContentTemplate="{StaticResource TestIcon}" Margin="0,0,0,12" /> <TextBlock Text="{Binding [data]}" /> </StackPanel> </DataTemplate> </ResourceDictionary>
ããã€ãã®ç¹ã«æ³šæãã䟡å€ããããŸãã
- ãã®ãã³ãã¬ãŒããã¢ããªã±ãŒã·ã§ã³åŽã§æååãšããŠããŒãããXamlReader.LoadïŒïŒã䜿çšããŠè§£æããŸãã ãã®ããšããåœç¶ããã¹ãŠã®XAMLããã®ããã«äœ¿çšã§ããããã§ã¯ãããŸããã æ£ããXAMLã«ã¯ãã³ãŒãããã€ã³ããxãžã®åç §ãã¯ã©ã¹ãã€ãã³ããµãã¹ã¯ãªãã·ã§ã³ãªã©ãå«ããªãã§ãã ããã
- DataTemplatesã¯ä»¥åã®èŠä»¶ã«æé©ãªã®ã§ã䜿çšããŸãã
- ResourceDictionaryã¯ãããã€ãã®ãã³ãã¬ãŒãã®ã³ã³ãããšããŠäœ¿çšããŸãã
- TestIconã¢ã€ã³ã³ãDataTemplateã®åœ¢ã§é åžããæ¹æ³ã«æ³šç®ããŠãã ããã ContentPresenterã䜿çšããŠè¡šç€ºããŸãã
- ããã¹ããããã¯ã®Textããããã£ã¯ãViewModelã®ã€ã³ãã¯ãµãŒïŒåŸã»ã©ïŒã«ãã€ã³ãããããšã«ãããäžéšã®ããŒã¿ããããã£ã«ãã€ã³ããããŸãã jsonã«ã¯ãŸã£ããåãååã®èŠçŽ ããããããã¯å¶ç¶ã§ã¯ãªãããšã«æ³šæããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³èªäœã«ãã®ãããªãã¥ãŒããã§ã«ãããšããŸãã
<phone:PhoneApplicationPage x:Class="DynamicXaml.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:DynamicXaml" mc:Ignorable="d"> <phone:PhoneApplicationPage.DataContext> <local:MainPageViewModel /> </phone:PhoneApplicationPage.DataContext> <ContentControl Content="{Binding DynamicData}" ContentTemplate="{StaticResource EntryPoint}" /> </phone:PhoneApplicationPage>
ãã®ãã¥ãŒã§ã¯ãContentControlã¯åçããŒã¿ã衚瀺ããããã®ãšã³ããªãã€ã³ãã§ãã ããã«ã¯éèŠãªèŠåããããŸããContentControlã¯ãEntryPointããŒãæã€ãã³ãã¬ãŒãã衚瀺ããããã«å¿ èŠãªãã®ãç¥ã£ãŠããŸããããã¯ãåå¥ã«é åžããXAMLã®ãã³ãã¬ãŒãã§ãã å®éãããŒåã¯ã衚瀺ããããã³ãã¬ãŒãã«ã€ããŠã¢ããªã±ãŒã·ã§ã³ãç¥ã£ãŠããå¯äžã®ãã®ã§ãã
ãããã£ãŠãViewModelã¯Viewã«å¯ŸããŠå®çŸ©ãããåçã³ã³ãã³ããããŒãããããã®ãã¹ãããžãã¯ãå®è£ ããŸãã
public class MainPageViewModel { public MainPageViewModel() { // 2 . string json = LoadDynamicData(); DynamicData = (JObject)JsonConvert.DeserializeObject(json); // . string xaml = LoadDynamicXaml(); // xaml. var resources = (ResourceDictionary)XamlReader.Load(xaml); // . foreach (DictionaryEntry entry in resources) { Application.Current.Resources.Add(entry.Key, entry.Value); } } public JObject DynamicData { get; private set; } }
ããã€ãã®ç¹ã説æããŸãã
- ãã®äŸã§ã¯ã Json.Netã䜿çšããŠjsonã解æã ãããŒã¿ãã€ã³ãã£ã³ã°ã«é©ãããªããžã§ã¯ããååŸããŸããã å®éããããã®ç®çã«ã¯DynamicDataContextã䜿çšããŸããããã®äŸã§ã¯ãç°¡åã«ããããã«JObjectã䜿çšããŸãã
- JObjectã«ã¯ãæååïŒjsonèŠçŽ ã®ååïŒãåãããã®èŠçŽ ã®å€ãè¿ãã€ã³ãã¯ãµãŒããããŸãã
- ãã®ããããã³ãã¬ãŒãã§ã¯ãããã¹ããããã¯ã®ããã¹ããã€ã³ãã¯ãµãŒ[ããŒã¿]ã«ã¢ã¿ãããããjsonããããŒã¿èŠçŽ ã®å€ãè¿ãããŸãã ãã®ãããéåžžã®jsonã¯ãã³ãã¬ãŒãã®ãã¥ãŒã¢ãã«ã«ãªããŸãã
ãã®äŸãåéãããæ°ã«å ¥ãã®Windows Phoneé»è©±ã§å®è¡ãããšããã®ç»åãèŠãããšãã§ããŸãã
![çµæ](https://habrastorage.org/files/20e/8c8/668/20e8c8668922498e9fd4b2fd6b722d90.png)
ãšãŠãç°¡åãã€èªç¶ã«ãã¢ããªã±ãŒã·ã§ã³ããŸã£ããç¥ããªãããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºããã ãã§ãã ãããŠãã¢ããªã±ãŒã·ã§ã³ããã®ããŒã¿ã衚瀺ããæ¹æ³ãç¥ããŸãã-ãã¹ãŠã®æ å ±ã¯2GISãµãŒããŒããããŠã³ããŒããããŸãã
ãŸãšã
WPçšã®å®éã®2GISãäœæããŸããã3次å ããããçµç¹ã®è©³çŽ°ãªãã£ã¬ã¯ããªãã¯ãã¹ãã©ãããã©ãŒã ã³ã¢ããããã¢ããªã±ãŒã·ã§ã³ã«é¢ä¿ãªãxamlãã³ãã¬ãŒããé åžããŠããŸãã ãããŠãããã¯ãã¹ãŠã€ã³ã¿ãŒãããã«æ¥ç¶ããã«åäœããŸãã äœããã®çç±ã§ããŸã Windows Phoneã¹ããŒããã©ã³ã«æ°ãã2GISãã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ããããå®è¡ããŸãã