×ÜÌå½á¹¹

Designer×ÜÌåÉÏÓÉÈý´ó²¿·Ö×é³É:View,ViewModelºÍModel,Õâ¸ö½á¹¹½è¼øÁËÁ÷ÐеÄMVVMģʽ¡£ÕâÈý²¿·ÖµÄÖ°Ôð·Ö¹¤ÊÇ£º
View
¸ºÔð°ÑViewModelÒÔͼÐεķ½Ê½Õ¹ÏÖ³öÀ´£¬ËüÖ÷ÒªÔÚ´¦Àí»·¨¡£ViewÊʺÏÓÃxamlÀ´±í´ï£¬¶ÔÓÚijЩ¸´ÔÓµÄlayout£¬ÈÔÈ»»áÐèҪдһЩcode,µ«ÕâЩcode²»Éæ¼°ÒµÎñÂß¼¡£ºÍMVVMµÄÇø±ðÊÇ£¬ÎÒÃÇÖ»ÊÇÔÚ¼òµ¥ÊäÈëµÄÇé¿öÏ£¬²ÉÓÃÁËBehaviorģʽ£¬¶ÔÓÚ¸´ÔÓµÄÊäÈ룬ÓÉÓÚÅжÏÓû§µÄÒâͼÐèÒª²Î¿¼Ðí¶àÆäËüÐÅÏ¢£¬¿ÉÄÜÒªÓõ½ºÜ¶àService,»òÕß²éÔĺܶàµÄ״̬ÐÅÏ¢£¬ÕâЩ´úÂëдÔÚView¶Ë²»ºÏÊÊ£¬ÎÒÃǾÍÖ±½Ó°Ñʼþ·¢¸øÁËViewModel,ÓÉViewModelÈ¥´¦Àí¡£ViewºÍƽ̨Ïà¹Ø£¬²»Í¬Æ½Ì¨£¨WPF¡¢SL,WP7£©µÄxaml¿ÉÄܲ»Í¬£¬´úÂëÒ²²»Í¬¡£
ViewModel
Ö÷Òª¸ºÔðÂß¼µÄ´¦Àí£¬½ÓÊÕEventºÍCommand£¬ÅжÏÓû§Òâͼ£¬¸Ä±äÊý¾Ý£¬²¢·´À¡¸øView¡£ViewModel¼ÈÓÐÊý¾Ý£¬ÓÖÄÜÏìӦʼþ£¬¶øÇÒÊÇÒ»¿ÃÊ÷£¬ËùÒÔËü±¾ÖÊÉϾÍÊÇÒ»¸öview,Ö»²»¹ýÊÇÒ»¸ö³éÏóµÄView,Ëü°ÑËöËéµÄ»·¨¶ª¸øÁËÕæÕýµÄView,Ö»¹ØÐÄÄÇЩºÍÂß¼ÓйصÄÊý¾Ý¡£ViewModelºÍViewÓÐÒ»¶¨µÄ¶ÔÓ¦¹ØÏµ£¬µ«ËüµÄ½áµã±ÈViewÒªÉٵö࣬Òò´Ë±ÈÖ±½ÓÔÚViewÉϽøÐÐÂß¼´¦ÀíÒª¼òµ¥µÃ¶à¡£ÓÉÓÚViewModelµÄÊý¾ÝºÍ²Ù×÷¶¼ÊÇÕë¶Ô³éÏóµÄ¸ÅÄî½øÐеģ¬Òò´ËËüºÍƽ̨Î޹ء£ÎªÁË·½±ã¶ÔViewModelÖеÄÂß¼²Ù×÷½øÐйÜÀí£¬ÎÒÃÇÒýÈëÁËServiceºÍFeatureµÄ¸ÅÄServiceÊÇÏòÆäËüÄ£¿éÌṩ֧³ÖµÄÄÚ²¿Ä£¿é£¬ÊÇϵͳµÄ»ù´¡£¬ËùÓеÄService¹¹³ÉÁËϵͳµÄ¹Ç¼Ü¡£FeatureÊÇʵÏÖϵͳÍⲿ¹¦ÄܵÄÄ£¿é£¬FeatureÖ®¼äûÓÐÒÀÀµ¹ØÏµ£¬ËüÃÇÖ»ÒÀÀµÓÚService¡£ÏµÍ³ÖеÄService²»¶à£¬¶øÇÒÖ»¹Ø×¢×îÖØÒªµÄÂß¼£¬´úÂëÁ¿²»´ó£¬ËùÒÔService¶¼ÊǾ¹ý¾«ÐÄÉè¼ÆºÍÁ¼ºÃµÄ²âÊÔ£¬¾ßÓкÜÇ¿µÄÎȶ¨ÐÔ¡£featureÊÇϵͳµÄƤÈ⣬ËüÖ±½Ó±©Â¶¸øÓû§£¬¹Ø×¢ºÜ¶àϸ½Ú£¬´úÂëÁ¿´ó£¬ÈÝÒױ仯£¬ÓÉÓÚfeatureºÍfeatureÖ®¼äûÓÐÒÀÀµÐÔ£¬ËùÒÔÕâÖֱ仯²»»á¶ÔÆäËüÄ£¿éÔì³ÉÓ°Ï죬ÀûÓÚ½¥½øÊ½µÄ¿ª·¢¡£
Model
ÊÇÊý¾Ý£¬°´ÕÕÒµ½ç´óʦµÄ˵·¨£¬ModelÊÇ´¿´âµÄÊý¾Ý¡£µ«ÎҺܻ³ÒÉÕâ¸ö˵·¨£¬Èç¹ûModelÊÇ´¿´âµÄÊý¾Ý£¬ÄÇËü¾ÍûÓдæÔڵıØÒª£¬ÒòΪViewModelÉÏÒ²ÓÐÊý¾Ý£¬ºÎ±ØÒª°ÑÊý¾Ý´æÁ½·ÝÄØ£¬Í¬²½ÆðÀ´»¹Í¦Âé·³¡£ÎÒµÄÀí½âÊÇ£¬ModelÉÏÊÇÓÐÂß¼µÄ£¬Ö»ÊÇÕâЩÂß¼ÊÇÊôÓÚÁíÒ»¸öÁìÓòµÄ·¶Î§ÁË¡£±ÈÈçDesignerµÄModel,¾ÍÊÇRuntimeµÄcontrol,ÕâЩControlÊÇÓÐÂß¼µÄ£¬µ«ËüÃǵÄÂß¼ÒѾºÍDesigntimeûÓÐÈκιØÏµ¡£ViewModelºÍModelµÄ¹ØÏµÊÇ£¬ViewModel²Ù×ÝModel,µ«Í¬Ê±Òª¼à²âModelµÄ±ä»¯£¬ºÍModelͬ²½¡£Èç¹ûÎÒÃÇÇå³þ³ýÁËViewModelÍ⣬²»»áÓÐÆäËüµÄÄ£¿éÈ¥ÐÞ¸ÄModel(ÕâÖÖÇé¿ö¶ÔÓÚһЩ¼òµ¥µÄDesignerÊÇÕý³£µÄ)£¬ÄÇôViewModelºÍModelµÄ¹ØÏµ¿ÉÒÔ¸ü¼òµ¥Ò»Ð©£¬Ö»ÓÐViewModel¸Ä±äModel,ÉÏͼÖÐViewModelºÍModelÖ®¼äµÄ¼ýÍ·¾ÍÖ»ÐèÒª±£Áô×ó±ßÄÇÒ»¸ö£¨Í¼ÖеļýÍ·±íʾÊý¾Ý´«µÝ£©¡£
´ÓÉÏÃæµÄ½éÉÜ£¬ÎÒÃÇ¿ÉÒÔ¿´³ö£¬ViewºÍModelÔÚDesignTime϶¼ÊDZȽϼòµ¥µÄ£¬¸´ÔÓ¶ÈÖ÷ÒªÔÚViewModel,ÎÒÃÇÐèÒª½øÒ»²½¶ÔËü²ûÊö¡£
ViewModel²ãµÄ½á¹¹

ÎÒÃÇÇ°ÃæÌáµ½£¬DesignerÖ÷Ìå½á¹¹·Ö³ÉÈý´ó²¿·Ö£ºView,ViewModel,Model,ÕâÀïµÄ¸ÅÄîÊÇÒ»¸öºê¹Û¸ÅÄ´ú±íËüËùÔÚµÄÄÇÒ»²ãÀïµÄËùÓнṹ¡£ÎÒÃÇÏÖÔÚÌÖÂÛViewModelÕâÒ»²ã£¬ËüÀïÃæ³ýÁËÒ»¸öViewModelÊ÷£¬»¹ÓÐһЩServiceºÍÐí¶àµÄFeature¡£ÎÒÃÇÖªµÀ£¬Í¼ÐÎÈí¼þµÄ¹¦ÄÜ£¬²»Íâºõ¾ÍÊÇ´¦ÀíÓû§µÄÊó±ê¼üÅÌÊäÈ룬Ȼºó¸Ä±äÊý¾Ý£¬×îºóÒÔ¿ÉÊÓ»¯µÄ·½Ê½·´À¡¸øÓû§£¬Òò´Ë£¬ÎÒÃÇÖ»Òª·ÖÎöÇå³þÎÒÃǵÄÈí¼þÊÇÈçºÎÀ´Ó¦¶ÔÕâÑùÒ»¸öÊäÈëÊä³ö¹ý³Ì¾Í¿ÉÒÔÁË¡£
ÎÒÃÇ¿´ÉÏͼ£¬ºìÉ«ÐéÏßÄڵĽṹ¶¼ÊÇÔÚ´¦ÀíÊäÈ룬ºìÉ«ÐéÏßÍâµÄ²¿·ÖÔÚ´¦ÀíÊä³ö£¨Õ¹ÏÖ£©£¬¿É¼û¶ÔÓÚDesigner,ÊäÈë·Ç³£¸´ÔÓ£¬Êä³ö±È½Ï¼òµ¥¡£ÎÒÃÇÏÈ·ÖÎö¼òµ¥µÄÊä³ö£ºViewModelʱ¿Ì¼àÊÓ×ÅModelµÄ±ä»¯£¬Ò»µ©·¢ÏÖModel·¢ÉúÁ˱仯£¬¾Í¸Ä±ä×Ô¼ºµÄPropertyÒÔͬ²½£¬×¢ÒâÕâÀïµÄModel²»Ò»¶¨ÊµÏÖÁËINotifyPropertyChanged½Ó¿Ú£¬Òò´ËÕâÖÖͬ²½¿ÉÄܲ»ÄܽèÓð󶨡£µ«ViewModelÒ»¶¨ÊÇDependencyObject,»òÕßʵÏÖÁËINotifyPropertyChanged½Ó¿Ú£¬ËùÒÔµ±ViewModelµÄÊôÐԱ仯ºó£¬Viewͨ¹ý°ó¶¨»áÈÃÕ¹ÏÖºÍÊý¾Ý±£³ÖÒ»Ö£¬Êä³ö¹ý³Ì¾ÍÍê³ÉÁË¡£
¶ÔÓÚÊäÈ룬ÎÒÃÇÐèÒªÕë¶Ô²»Í¬µÄÇé¿ö½øÐп¼ÂÇ£¬»ù±¾ÉÏ£¬ÎÒÃÇ¿ÉÒÔ°ÑÊäÈë·Ö³ÉÁ½´óÀࣺ¼òµ¥ÊäÈëºÍ¸´ÔÓÊäÈë¡£
ʲôÊǼòµ¥ÊäÈ룿
¾ÍÊÇÕû¸öÊäÈë´¦Àí¹ý³ÌºÜ¼òµ¥£¬Ç£ÉæµÄÄ£¿éºÜÉÙ£¬CommandÓÐÃ÷È·µÄ½ÓÊܶÔÏó¡£³£¼ûµÄAdornerÉϵÄÐÐΪ£¬´ó²¿·Ö¶¼ÊÇÈç´Ë¡£¾ÙÒ»¸ö¾ßÌåµÄÀý×Ó£¬ÓÐÒ»¸öButton,µ±Ëü±»Ñ¡ÖеÄʱºò£¬»á³öÏÖÒ»¸öAdorner,ÉÏÃæÓÐÒ»¸öSlider,µ÷ÕûÕâ¸öSlider,ButtonµÄ͸Ã÷¶È»áËæ×ű仯¡£Òª´¦ÀíÕâ¸öSlider¶ÔModelµÄ¸Ä±ä£¬×î¼òµ¥µÄ×ö·¨¾ÍÊǰÑSliderË«Ïò°ó¶¨µ½¶ÔÓ¦µÄAdorner
ViewModelµÄij¸öÊôÐÔ£¬¼´Ê¹²»ÄÜÓÃË«Ïò°ó¶¨£¬Ò²¿ÉÒÔͨ¹ýBehaviorģʽµ÷ÓöÔÓ¦ViewModelµÄCommand¡£Õû¸ö¹ý³Ìֻɿ¼°µ½Ò»¸öAdorner
View,Ò»¸öAdorner ViewModelºÍÒ»¸öButton Control,ºÍϵͳµÄÆäËü²¿·ÖûÓÐʲô¹ØÏµ£¬ÕâÀàÊäÈëÐÐΪÓÃË«Ïò°ó¶¨»òÕßBehaviorģʽ´¦Àí×îºÏÊÊ¡£
ʲôÊǸ´ÔÓÊäÈëÄØ£¿
¾ÍÊÇÕû¸öÊäÈë´¦Àí¹ý³ÌÉæ¼°µ½µÄÄ£¿é±È½Ï¶à£¬Êܺܶàϵͳ״̬µÄÓ°Ï죬ÊäÈëûÓÐÃ÷È·µÄ½ÓÊÕ¶ÔÏ󣬳äÂúÁ˱仯¡£ÕâÀàÐÐΪÔÚDesignerÖÐÒ²ºÜ¶à¡£¾ÙÒ»¸öMultirow
Template DesignerµÄÀý×Ó£¬Ò»¸öCellViewÉÏÊÕµ½Ò»¸öMouseLeftButtonDownʼþ£¬ViewÓ¦¸ÃÔõô´¦ÀíÄØ£¿Ëü»áµ÷ÓÃViewModelµÄʲôCommandÄØ£¿CellViewÐèÒªÏÈÅжÏÓû§µÄÒâͼ£¬µ«Õâ¸öÅжϱȽÏÓÐÄѶȡ£Óû§ÓпÉÄÜÊÇÏëÑ¡ÖÐÕâ¸öCell,Èç¹ûÊÇÕâÑùÐèÒªÖ´ÐÐSelection
Command,µ«ÊÇÈç¹ûÕâ¸öʱºòDesigner´¦ÓÚTab Orderģʽ£¬ÄǾͲ»ÔÊÐíÑ¡Ôñ£¬¿ÉÄÜÊÇÓû§Ïë¸Ä±äTab
orderµÄÖµ¡£Ò²ÓпÉÄÜÊÇÓû§¸Õ²ÅÑ¡ÔñÁËÒ»¸öToolboxItem,ÏÖÔÚÊÇÏë´´½¨Ò»¸öCell£¬»¹ÓпÉÄÜÊÇÓû§ÏëÒÆ¶¯Cell£¬Òª½øÐÐÕâЩÅжϣ¬±ØÐëÒª½èÖúÆäËüServiceºÍ²éѯϵͳÖÐijЩ״̬£¬Èç¹ûÅжϳöÀ´ÊÇÑ¡Ôñ£¬»¹µÃ¼ì²éÕâ¸öʱºòµÄ¼üÅÌ״̬£¬¼ì²éĿǰÊÇ·ñÖ§³ÖÀ©Õ¹Ñ¡Ôñ£¬ÔÚÀ©Õ¹Ñ¡ÔñģʽÏ£¬°´Control¼üºÍShift¼üµÄÐÐΪ²»Ò»Ñù¡£
ÎÒÃÇ»¹µÃ¼ì²éµ±Ç°CellÊÇ·ñÒѾ±»Ñ¡ÖУ¬Èç¹ûÒѾ±»Ñ¡ÖУ¬¾ÍÐèÒª·´Ñ¡£¬ÕâÐèÒªÎÒÃDzéѯSelection
Service¡£Èç¹ûÎÒÃÇ·¢ÏÖCellÊÇ¿ÉÒÔÒÆ¶¯µÄ£¬ÄÇôMouseLeftButtonDownµÄ´¦ÀíÓÖµÃ×¢ÒâÁË£¬Èç¹ûCellûÓб»Ñ¡Ôñ£¬ÒªÏÈÑ¡ÖÐCell,Èç¹ûCellÒѾ±»Ñ¡ÖÐÁË£¬²»ÄÜÁ¢¼´·´Ñ¡£¬Òª¿´Óû§ÊÇ·ñºóÐøÓÐÒÆ¶¯µÄ²Ù×÷£¬·´Ñ¡±ØÐë·Åµ½MouseLeftButtonUpÖнøÐС£»¹Òª¿¼Âǵ½£¬½ñºó¿ÉÄÜÐèÒªÔö¼ÓеÄFeature,±ÈÈçÔö¼ÓÒ»¸öÒÆ¶¯»²¼µÄ¹¦ÄÜ£¬Óû§ÏÈÔÚToolbarÉϵ¥»÷ÁËÒ»¸öÊÖÐÍIconµÄCommand,È»ºóÔÙÔÚCellViewÉϵ¥»÷ÁËһϣ¬Õâ¸öʱºòÒÔǰµÄÅж϶¼ÎÞЧ£¬ÒòΪÓû§ÏÖÔÚÊÇÒªÒÆ¶¯Õû¸ö»²¼£¬ÄÇôÎÒÃǺܿÉÄܵÃÈ¥ÐÞ¸ÄÒÔǰµÄCellViewµÄCode¡£
×ÜÖ®£¬ViewÔÚ´¦ÀíijЩʼþµÄʱºò£¬ÐèÒªÖªµÀµÄ¶«Î÷Ì«¶à£¬Ö»¿¿ViewModelÌṩµÄPropertyÔ¶Ô¶²»¹»£¬ViewModel²ã±ØÐë°ÑÕû¸ö½á¹¹£¨ËùÓеÄServiceºÍ¸÷ÖÖ״̬£©ÍêÈ«±©Â¶¸øView²ã£¬ÕâÑùÏÔÈ»²»·ûºÏÎÒÃÇÄ£¿é»®·ÖµÄ˼·¡£Òò´Ë£¬¶ÔÓÚÕâÀิÔÓÊäÈ룬ÎÒÃÇÈÃViewʲô¶¼²»´¦Àí£¬¶øÊǰÑʼþת·¢¸øViewModel²ãÈ¥´¦Àí¡£
³ýÁËijЩʼþ´¦ÀíºÜ¸´ÔÓ£¬Ä³Ð©CommandµÄ´¦ÀíÒ²±È½ÏÂé·³£¬±ÈÈç²Ëµ¥ÉϵÄcut,copy,paste,deleteµÈ£¬ÕâЩCommandûÓÐÃ÷È·µÄ½ÓÊÕ¶ÔÏó£¬×îÖÕÓÉËÀ´´¦ÀíÐèÒª¸ù¾Ýϵͳµ±Ê±µÄ¸÷ÖÖ״̬¾ö¶¨¡£ÎªÁ˽â¾öÕâÀàCommand,ÎÒÃDZØÐëÉè¼ÆÒ»¸öCommandµÄ·ÓÉ»úÖÆ£¬ÈÃÄÇЩ¹ØÐÄÕâ¸öCommandµÄfeatureÄܹ»°´ÕÕÒ»¶¨µÄÓÅÏȼ¶À´´¦ÀíÕâ¸öCommand.
ΪÁË´¦ÀíÉÏÊöµÄ¸´ÔÓÊäÈ룬ÎÒÃÇѧϰwpf designer,Éè¼ÆÁËÒ»¸ö±È½Ï¸´ÔӵĻúÖÆ¡£ÎÒÃÇÉè¼ÆÁËÒ»¸ö½ÐToolµÄÀà,ËüÓÐÒ»¸öTask¼¯ºÏ£¬°´ÕÕÒ»¶¨µÄÓÅÏȼ¶°ÑCommand½»¸øÃ¿¸öTask´¦Àí¡£Task´ÓÄĶùÀ´ÄØ£¿TaskÊôÓÚFeature£¬µ±Ò»¸öFeatureÈÏΪËüÐèÒª¼àÌýijЩCommandʱ£¬Ëü»á°Ñ×Ô¼ºµÄTaskÌí¼Óµ½ToolµÄTasksÖС£ÊÂʵÉÏTask²¢Ã»ÓÐÖ±½Ó´¦ÀíCommand£¬TaskÄÚ²¿ÓÐÒ»¸öCommandBinding¼¯ºÏ,Ëü¸ºÔð´¦ÀíCommand¡£TaskµÄCommandbindingÔÚÖ´ÐдúÂëʱ£¬ÐÞ¸ÄViewModelµÄÊôÐÔ£¬»òÕßÖ´ÐÐÒ»¸öViewModelµÄCommand¡£
¶ÔÓÚView²ãת·¢¸øViewModel²ãµÄEvent,ÔÚ´¦ÀíÖлᱻÏÈ·Òë³ÉCommand,È»ºó°´ÕÕÇ°ÃæµÄCommandÁ÷³Ì´¦Àí¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬ÐèÒª¾ÀúÏÂÃæÁ½¸ö²½Ö裺
µÚÒ»²½
View½Óµ½Êó±ê¼üÅÌʼþºó£¬»áµ÷ÓÃInputServiceµÄÒ»¸öº¯ÊýPerformInput£¬°Ñʼþת·¢¸øInputService¡£InputService»á¶ÔÕâ¸öʼþ½øÐÐÔ¤´¦Àí£¬È»ºóÔÙת·¢³öÈ¥¡£Ô¤´¦Àí½â¾öÁ½¸öÎÊÌ⣺1.°ÑÕë¶ÔViewµÄʼþ£¬×ª»»³ÉÕë¶ÔViewModelµÄʼþ¡£ÒòΪViewModel¾ÍÊÇÒ»¸ö³éÏóµÄView,Èç¹û°Ñʼþת»»³ÉÁËÕë¶ÔViewModelµÄʼþ£¨¾ÍÊǰÑʼþµÄ²ÎÊýSenderת»»³É¶ÔÓ¦µÄViewModel,EventArgsת±ä³ÉÊʺÏÓÚViewModelµÄEventArgs£©,ÎÒÃǾͿÉÒÔ°´ÕÕÒÔǰÊìϤµÄwindowsʼþ´¦Àí˼·À´´¦ÀíViewModelµÄʼþ£¬°ÑView³¹µ×ÆÁ±Îµô¡£2.Ìí¼Ó»ò¸Ä±äһЩʼþ£¬ÒÔ·½±ãºóÐøµÄ´¦Àí¡£DesignerÓÐһЩƵÂÊÌØ±ð¸ßµÄ²Ù×÷£¬±ÈÈçDrag,ϵͳµÄĬÈÏʼþ±È½ÏÈõ£¬»òÕßûÓжÔÓ¦µÄʼþ£¬Èç¹ûÎÒÃÇÔÚÕâ¶ù½øÐÐһЩǿ»¯£¬ºóÃæµÄ´¦Àí¾Í»á¼õÉٺܶàÂé·³¡£
µÚ¶þ²½
InputService¶Ôʼþ½øÐÐÍêÔ¤´¦Àíºó£¬»á°Ñʼþ½»¸øTool¡£Tool²»µ«¿ÉÒÔ¶ÔCommandÅÉ·¢£¬»¹ÄܶÔEvent½øÐÐÅÉ·¢£¬ÒòΪTaskÖгýÁËÓÐCommandBinding,»¹ÓÐInputBinding,InputBindingÓÃÓÚ´¦Àíʼþ¡£Ê¼þ±»´¦ÀíÍêºó£¬»áÉú³ÉÒ»¸öCommand,Õâ¸ö¹ý³Ì¾ÍÊǰÑʼþ·Òë³ÉCommandµÄ¹ý³Ì¡£·Òë³ÉµÄCommand,»á·¢¸øTool´¦Àí£¬ÈÆÕâ¸öȦÊÇΪÁ˺ÍÇ°ÃæµÄCommand´¦ÀíÁ÷³Ì±£³ÖÒ»Ö¡£
Ôںʹó¼ÒµÄÌÖÂÛÖУ¬¾õµÃÊäÈë´¦ÀíµÄÁ÷³ÌÌ«¸´ÔÓ£¬ÓÈÆäÊÇÎÒ¿ªÊ¼µÄʱºò£¬ÎªÁ˼õÉÙViewModel²ãµÄÐÅÏ¢Èë¿Ú£¬²»½¨ÒéViewÈ¥Ö±½Ó¸Ä±äViewModel£¬ËùÓÐʼþ¶¼×ª·¢¸øViewModel²ãÀ´´¦Àí¡£´ó¼Ò·¢ÏÖ£¬Èç¹ûÄÇÑù×ö£¬¼´Ê¹×öÒ»¸öºÜ¼òµ¥µÄÊäÈ룬¶¼ÒªÈƺܴóÒ»¸öȦ×Ó£¬·Ç³£Âé·³¡£Òò´Ë£¬¶ÔÓÚ¼òµ¥µÄÊäÈë´¦Àí£¬ÎÒÃÇÈÏΪӦ¸ÃÓÃË«Ïò°ó¶¨»òÕßBehaviorģʽ£¬Ö±½ÓÐÞ¸ÄViewModel£¬Ö»¶ÔÓÚÄÇÖֱȽϸ´ÔÓµÄÊäÈ룬²Å°Ñʼþת·¢¸øViewModel¡£ÕâÑùÒ»À´£¬Õâ¸öͼ±äµÃËÆºõ¸ü¸´ÔÓÁË,µ«ÎÒ¾¹ý×Ðϸ¿¼ÂÇ£¬¾õµÃ²»ÄÜɾ¼õ£¬ÒòΪDesignerÓÐЩÊäÈë´¦ÀíµÄÁ÷³Ìȷʵ·Ç³£¸´ÔÓ£¬¹ýÓÚ¼òµ¥µÄ½á¹¹»áµ¼ÖºóÃæÐ´featureµÄʱºòÐèÒª¿¼ÂǸü¶àµÄÎÊÌâ¡£
ÁíÍâ˵һÏÂTool,´ó¼Ò²»´óÊÊÓ¦Õâ¸ö½á¹¹¡£ÒòΪ°´ÕÕÎÒÃÇÒÔǰµÄ˼·£¬¼´Ê¹Ê¼þ½»¸øViewModel²ã´¦Àí£¬¾¹ýÔ¤´¦Àíºó£¬InputServiceÒ²Ó¦¸ÃÖ±½Ó°ÑʼþÅÉ·¢¸ø¶ÔÓ¦µÄViewModel,¼´Ê¹ÒªÂ·ÓÉ£¬Ò²¿ÉÒÔѧWpfµÄ·ÓÉ»úÖÆ£¬ÄÇÑù´ó¼Ò¶¼±È½ÏÊìϤ¡£µ«ÎÒÈÏΪ£¬ÄÇÑùµÄÉè¼Æ»áÈôóÁ¿µÄÂ߼дµ½ViewModelÖУ¬ºÍViewModel°óµÃ±È½ÏËÀ£¬ÕâÑù»áÓÐÁ½¸ö´óµÄȱµã£º
¸´ÔÓÊäÈë´¦Àí
Âß¼ÍùÍù¿çÔ½¶à¸öViewModel£¬±¾À´ÊÇÒ»¸öÍêÕûµÄÂß¼£¬²»µÃ²»·ÖƬдÔÚ²»Í¬µÄViewModelÖУ¬ÒÀ¿¿È«¾Ö±äÁ¿»òÕßServiceÀ´Ðµ÷¡£±ÈÈçÎÒÃÇÔÚWinform
DesignerÖУ¬¾ÍÉè¼ÆÁËÒ»¸öDragService£¬Óõ÷dz£Æµ·±£¬ÔÒò¾ÍÊÇÔÚDragÖУ¬²»Í¬µÄViewÐèÒªÐ×÷À´Íê³ÉһЩÈÎÎñ£¬ËüÃÇÖ»ÄÜͨ¹ýDragServiceÀ´Ðµ÷¡£µ«ÏÖÔÚÕâÖÖ»úÖÆÏ£¬¾Í²»ÐèÒªDragServiceÁË¡£
¶ÔÔÓеÄÐÐΪ½øÐÐÐ޸ĺÜÀ§ÄÑ
Ò»¸öµäÐͳ¡¾°¾ÍÊÇ£¬ÔÚijÖÖ״̬Ï£¬ÐèÒª½ûÖ¹µôijЩÔÓеÄÐÐΪ¡£ÔÚWinform DesignerÏ£¬ÎÒÃÇÖ»ÄÜÓÐÁ½ÖÖ´¦Àí·½Ê½:Ò»£¬ÐÞ¸ÄÔÀ´µÄCode,Ôö¼ÓÅжÏÌõ¼þ£¬ÕâÖÖ·½Ê½ºÜÈÝÒ׸ã³öÀ´ÐµÄBug¡£¶þ£¬ÔÚÔÀ´µÄViewÉϸÇÉÏÒ»¸ö͸Ã÷µÄView£¬°Ñʼþ½Ù³Öµô£¬ÕâÖÖ·½Ê½ÊôÓڱȽϱä̬µÄ·½Ê½£¬ÏµÍ³ÖÐÈç¹ûÓöàÁË£¬»áÈúóÃæµÄÈ˺ÜÄÑÀí½âÔÓеÄÉè¼Æ¡£Î¢ÈíµÄWinform
DesignerÔÚ´¦ÓÚÕâÖÖÇé¿öʱÓÐÒ»¸ö¾µäµÄ±ä̬´¦Àí£¬ËüÐèÒª·ÅÒ»¸öRuntimeµÄControlÔÚDesignerÉÏ£¬µ«²»ÏëÈÃËüµÄÐÐΪÔÚDesignerÖÐÆð×÷Ó㬻òÕßÔÚijЩÇé¿öÏÂÓÐÑ¡ÔñµÄÈÃËüÆð×÷Óã¬ËüÓÃÁËhook¼¼Êõ£¬½Ù³ÖwindowsÏûÏ¢£¬Èç¹ûÓÐÐèÒª£¬¿ÉÒÔÑ¡ÔñÐԵķŹýȥһЩÏûÏ¢¡£Visual
StudioÖÐÕâÀà¶«Î÷ÓõñȽ϶࣬µ¼Ö¼´Ê¹Äã°´Õý³£µÄ·½Ê½·ÅÒ»¸öControlÔÚVisual sdudioÖУ¬ËüÓÐʱ¹¤×÷Ò²²»Õý³££¬ÒòΪËüµÄijЩÏûÏ¢±»hook½Ù³ÖµôÁË¡£
wpfÖÐÌṩÁËPreview message,ÔÚijЩÇé¿öÏÂÄܹ»¼ò»¯ÕâÀàÎÊÌâµÄ´¦Àí£¬µ«ÎÒÏàÐÅËüµÄÁé»îÐÔ»¹ÊÇÔ¶Ô¶²»ÈçToolÕâÖÖ°ÑÏûÏ¢¼¯ÖÐÆðÀ´´¦ÀíµÄ·½Ê½£¬ÒòΪÕâÖÖ»úÖÆ°ÑÂß¼³¹µ×´ÓViewModelÖаþÀë³öÀ´ÁË£¬Ì¸²»ÉÏÐèÒª¸Ä±äÄÄÒ»¸öViewModelµÄÐÐΪ£¬ÒòΪViewModelûÓпØÖÆÐÐΪµÄ´úÂ룬ËùÓÐÐÐΪ¶¼ÊôÓÚÍâÃæµÄFeature,Ö»ÒªFeature·¢Éú±ä»¯£¬¶ÔÓ¦µÄViewModelµÄ¡°ÐÐΪ¡±×ÔÈ»¾Í·¢Éú±ä»¯¡£
µ±È»£¬ToolÕâÖÖ°ÑËùÓÐÏûÏ¢¼¯Öд¦ÀíµÄ·½Ê½Ò²ÓÐȱµã£¬¾ÍÊÇÄ£¿é¼äµÄ¸ÉÈŷdz£ÑÏÖØ£¬¾ÍÏ൱ÓÚ±à³ÌÓïÑÔÖеÄÈ«¾Ö±äÁ¿£¬·½±ãÁËʹÓ㬵«´øÀ´Á˸ÉÈÅ¡£Òò´ËÎÒÃÇÍÆ¼ö¸´ÔÓµÄÊäÈëÓÃÕâÖÖ·½Ê½£¬¼òµ¥µÄÊäÈëÓÃBehaviorģʽ£¬Ö±½ÓÐÞ¸ÄViewModel£¬»òÕßͨ¹ýDelegateCommand,°ÑViewµÄʼþÖ±½Óת·¢¸øViewModel´¦Àí,ÈÆ¹ýÕâ¸ö»úÖÆ¡£µ«ÊÇ£¬ÎÒÃÇÒ»¶¨ÒªÒâʶµ½£¬ÈƹýÕâ¸ö»úÖÆ»á´øÀ´µÄÎÊÌ⣬¾ÍÊǺóÃæÒª¸Ä±äÔÓеÄÐÐΪÊDz»Ðеģ¬ÒòΪÏûÏ¢µÄ´«Êä¹ý³ÌÖÐûÓÐÁôϸıäµÄ¿ØÖƵ㣬ֻÄÜÈ¥ÐÞ¸ÄÔÓеÄViewºÍViewModelµÄ´úÂë¡£
ÔÚdesignerÖУ¬ÕâÀà¼òµ¥ÊäÈ뷽ʽÖ÷ÒªÓ¦¸ÃÓÃÓÚAdorner,ÒòΪAdornerÒ»°ã¶¼ÊÇÁÙʱʹÓÃһϣ¬ÊäÈë¼òµ¥£¬¼´Ê¹ºóÃæ·¢ÏÖÐèÒª¸Ä±äËüµÄÐÐΪ£¬²»µÃÒÑ¿ÉÒÔ»»Ò»¸öAdornerModelºÍAdornerView,Ò²²»»á¶ÔϵͳÔì³É¶à´óÓ°Ïì¡£µ«Èç¹ûÄãÒª°ÑMultirow
Template designerÖÐSectionViewModelºÍSectionView£¬»òÕßCellViewModelºÍCellView»»ÁË£¬ÄÇÓ°Ïì¾Í´óÁËÈ¥ÁË¡£ËùÒÔÎÒÃǽñºóÔÚÑ¡ÔñÄÄÖÖÊäÈë´¦Àí·½Ê½Ê±£¬Ò»¶¨Òª³ä·Ö¿¼Âǵ½ºóÃæ±ä»¯µÄÐèÒª¡£
ViewºÍViewModelµÄ¶ÔÓ¦¹ØÏµ

ÌÖÂÛÖдó¼Ò¾õµÃViewºÍViewModelµÄ¶ÔÓ¦¹ØÏµ±È½Ï¸´ÔÓ£¬ËùÒÔÕâ¶ùµ¥¶À»¨Ò»½ÚÀ´Ì¸Ì¸ËüÃǵĹØÏµ¡£¾ÙÒ»¸ö´ó¼ÒÊìϤµÄMultiRowµÄÀý×Ó£¬ÏÖÔÚ¼ÙÉèÓÐÒ»¸öSectionViewModel,ËüµÄChilrenÖÐÓÐÁ½¸öCell,·Ö±ðÊÇCellViewModel1ºÍCellViewModel2,ÏÖÔÚÎÒÃÇ¿´Õâ¸öViewModel
TreeÈçºÎÕ¹ÏÖ£¬Ê¼þÈçºÎ´«µÝ£¬HitTestÊÇÈçºÎʵÏֵġ£
ÏÈ¿´Ò»ÏÂÎÒÃÇ»áÔõÑùÀ´Éè¼ÆView,ΪÁ˱ãÓÚÓÃXaml±í´ï£¬ÎÒÃÇÒ»°ã»áÓÃUserControlÀ´±í´ïView,ËäÈ»CustomControlÒ²ÄÜÓÃXaml,µ«ËüµÄxamlÒ»°ãҪдµ½ResourceÖУ¬ËùÒÔÎÒÃÇÒ»°ã²»Óá£ÎÒÃÇÏÖÔÚÓÐÁ½¸öÀࣺSectionViewModelºÍCellViewModel,Òò´Ë£¬¶ÔÓ¦µÄÎÒÃÇ»áÉè¼ÆÁ½¸öUserControl,·Ö±ð½Ð×öSectionViewºÍCellView¡£Õâ¶ùÎÒҪ˵Ã÷µÄÊÇ£¬ÓÉÓÚCellViewºÜ¼òµ¥£¬×ö²úÆ·µÄʱºòÒ²Ðí²»»áµ¥¶ÀΪËüÓÃÒ»¸öUserControl,¶øÊÇÔÚSectionµÄXamlÀïÖ±½Ó±í´ïÁË£¬ÉõÖÁMultiRowµÄÕû¸öTemplate¶¼ÓÃÒ»¸öUserControlÃèÊö¡£ÔÚÕâÀïΪÁË·½±ã²ûÊö¸ÅÄÎÒÃǰÑÁ½¸öView¿´³ÉÊÇÁ½¸ö¶ÀÁ¢µÄUserControl¡£
ÔõÑùÀ´Éè¼ÆSectionViewÄØ£¿ÎÒÃÇ»áÔÚUserControlÖзÅÒ»¸öItemsControl,°ÑËüµÄItemsSource°î¶¨µ½datacontextµÄChilrenÊôÐÔÉÏ£¬È»ºó°ÑItemsPanelÉèÖóÉCanvas,ÔÚItemTemplateÖÐÖ¸¶¨ÓÃCellViewÀ´Õ¹ÏÖCellViewModel,µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔÓÃÒþʽDataTemplateÀ´±í´ï¡£
CellViewÄØ£¿ÎÒÃǾÍÔÚUserControlÖзÅÒ»¸öBorder,°ÑBorderµÄBackground°ó¶¨µ½DataContextµÄBackground¾Í¿ÉÒÔÁË¡£
µ±Íⲿij¸ö¶ÔÏó°ÑSectionView¼ÓÔØµ½VisualTreeÉÏʱ£¬Ëü»á¸ºÔð°ÑSectionViewµÄDataContextÖ¸ÏòSectionViewModel(Õâ¸ö¶ÔÏóºÜ¿ÉÄÜÒ²ÊÇÒ»¸öDataTemplate),ͨ¹ý°ó¶¨£¬ËùÓеÄCellViewModel¶¼»áÓжÔÓ¦µÄCellView,×îºóµÄVisualTree»áÈçͼÖÐËùʾ¡£
ÎÒÃÇ¿´µ½£¬VisualTreeµÄVisual½áµãÃ÷ÏÔ¶àÓÚViewModelµÄ½áµã£¬ÄÇôËüÃǵĶÔÓ¦¹ØÏµÊÇÈçºÎµÄÄØ£¿
ÓÐÁ½ÌõÔÔò£º
1.Ò»¸öViewModelÓÐÇÒÖ»ÓÐÒ»¸öVisualºÍËü¶ÔÓ¦£¬ÎÒÃÇ¿ÉÒÔ°ÑÕâ¸öVisual½Ð×öÕâ¸öViewModelµÄView¡£Ò»¸öVisual¶ÔÓ¦Ò»¸ö»òÁã¸öViewModel¡£
2.Èç¹ûViewModel AÊÇViewModel BµÄ׿ÏÈ£¬ÄÇô¶ÔÓ¦µÄVisual AÒ²Ó¦¸ÃÊÇVisual
BµÄ׿ÏÈ£¬Èç¹ûViewModel A²»ÊÇViewModel BµÄ׿ÏÈ£¬ÄÇô¶ÔÓ¦µÄVisual AÒ²²»Ó¦¸ÃÊÇVisual
BµÄ׿ÏÈ¡£
°´ÕÕÎÒÃǵÄÉè¼Æ£¬ViewModelºÍVisual¶ÔÓ¦¹ØÏµÈçÉÏͼ£¬ºìÉ«½áµãµÄVisual¾ÍÊÇViewModel¶ÔÓ¦µÄView¡£ÄÇôÕâ¸ö¶ÔÓ¦¹ØÏµÊÇÔõô¼Ç¼µÄ£¬ÒòΪ½ñºóµÄºÜ¶àÂß¼»áÒÀÀµÕâ¸öÊý¾Ý¡£
Ê×ÏÈ£¬ÎÒÃÇ»áÔÚÉè¼ÆµÄʱºòÈ϶¨ViewModelºÍVisualµÄ¶ÔÓ¦¹ØÏµ£¬ÈçÉÏͼ£¬ÎÒÃÇÈÏΪSectionViewModel¶ÔÓ¦SectionView(UsrControl),CellViewModel¶ÔÓ¦CellView(UserControl),ËùÒÔÎÒÃÇ»áÔÚÕâÁ½¸öUserControlµÄXamlÖÐÉèÖÃÒ»¸ö¸½¼ÓÊôÐÔViewProperties.ViewModel,°ÑËü°ó¶¨µ½DataContextÉÏ£¬ÕâÑù¾ÍÈÃViewÖ¸ÏòÁËViewModel,ÔÚ¸½¼ÓÊôÐÔViewProperties.ViewModelµÄPropertyChangedʼþÀÎÒÃǻᴴ½¨Ò»¸öIViewModel¶ÔÏ󸳸ø¶ÔÓ¦µÄViewModelµÄViewÊôÐÔ£¬IViewModel»á×¥×ÅÕæÕýµÄVisual¡£ÕâÑùViewModelºÍViewµÄË«Ïò¶ÔÓ¦¹ØÏµ¾Í½¨Á¢ÆðÀ´ÁË¡£
ÈçºÎ½â¾öHitTest?
View²ã»áʵÏÖÒ»¸öIViewService,ÀïÃæÓÐÒ»¸öº¯Êý:IEnumerable<IView>
FindViews(Point p),ÆäËü¶ÔÏó¿ÉÒÔµ÷ÓÃÕâ¸öº¯ÊýÀ´Äõ½HitTestµÄIView,ÔÙͨ¹ýIViewÄõ½ViewModel(ÎÒÏëÕâÒ»²½¿ÉÒÔ¼ò»¯µ½Ö±½Ó·µ»ØViewModel,ĿǰÊÇ·µ»ØµÄIView)¡£View²ãÊÇÈçºÎ²éÕÒViewµÄÄØ£¿Ëü»áµ÷ÓÃVisualTreeHelperµÄHitTest,ÕÒµ½HitµÄVisual,È»ºó±éÀú¸¸Visual,ÕÒµ½Ä³¸öÓжÔÓ¦ViewModelµÄVisual,ÄÇôÕâ¸öVisual¾ÍÊÇHitµÄViewÁË¡£
½â¾öÁËHitTest£¬InputService¶ÔʼþµÄÔ¤´¦Àí¾Í¼òµ¥ÁË£¬ËüÄõ½Ò»¸öMouseʼþ²ÎÊýºó£¬»áµÃµ½MouseµÄ×ø±ê£¬È»ºóµ÷ÓÃIViewServiceµÄFindViewº¯Êý£¬¾Í¿ÉÒÔÖªµÀÕâ¸öMouseʼþÊÇÕë¶ÔÄÄÒ»¸öViewModel,È»ºó°ÑSenderºÍEventArgs¶¼×ª»»³ÉÊʺÏÓÚViewModelµÄ£¬ÔÙת·¢³öÈ¥¾Í¿ÉÒÔÁË¡£
ÓëPropertyGrid½»»¥
»áÓÐÒ»¸öרÃŵÄServiceÀ´¸ºÔðÓëPropertyGrid½»»¥£¬Õ¹ÏÖÔÚPropertyGridÉϵĶÔÏóÊÇViewModel´´½¨µÄÒ»¸ö¶ÔÏó£¬Òò´ËÊÜViewModel¿ØÖÆ£¬ViewModel¿ÉÒÔ¾ö¶¨ÊǰÑ×Ô¼º½»¸øPropertyGrid,»òÕßÉè¼ÆÁíÒ»¸öÀàÐÍ£¬ÈÚºÏModelµÄPropertyºÍDesign
TimeµÄProperty¡£
ÐòÁл¯
ÐòÁл¯ÓÉרÃŵÄServiceÀ´Íê³É£¬ServiceÖеǼÇÓв»Í¬ÀàÐ͵ÄViewModelµÄSerializer,ĬÈϵÄSerializer»áµ÷ÓÃRuntimeµÄÐòÁл¯·½·¨Ö±½Ó°ÑRuntimeControlÐòÁл¯³ÉÎı¾£¬Õâ¸öÐòÁл¯Éè¼ÆÑ§Ï°Winform
designerµÄÐòÁл¯¼Ü¹¹¡£
Undo/Redo
´ÓÎÒÃÇÉÏÃæµÄÉè¼Æ¿´£¬ËùÓеÄÊäÈë¶¼Òª¾¹ýViewModel,ËùÒÔÔÚViewModelÉÏ×öUndo/Redo¡£ÏµÍ³ÖÐÓÐÒ»¸öUndoService,µ±Ò»¸öViewModelµÄProperty±»¸Ä±äʱ£¬»á֪ͨUndoService,UndoService»á°Ñ¸Ä±äǰµÄÖµ¼Ç¼ÏÂÀ´¡£ÖµµÃ×¢ÒâµÄÊÇ£¬²»ÊÇËùÓеÄViewModelµÄÊôÐÔ¶¼ÐèÒªUndo,Õâµã¾ßÌåÉè¼ÆÊ±¸ù¾ÝÐèÒªÅжϣ¬Ò»°ãÀ´Ëµ£¬RuntimeµÄProperty¶¼ÐèÒª£¬·ÇRuntimeµÄProperty¿ÉÄÜÓв¿·ÖÐèÒª¡£ÎÒ¿¼Âǹý¸ù¾ÝUndoºÍÐòÁл¯µÄÒªÇó£¬ÔÚViewModelºÍruntime
controlÖ®¼äÔÙ¸ôÀë³öÀ´Ò»¸ö²ã´Î£¬±ÈÈç½ÐModelItem,ÕâÑù½á¹¹ÉϸüÇå³þһЩ¡£µ«¶àÒ»¸ö²ã´Î¿ª·¢µÄʱºò»á¶à²»ÉÙ¹¤×÷£¬¾õµÃ²»»®Ë㣬ĿǰÔݶ¨ÓÉViewModel¼æÈÎÕâ¸öÖ°Ôð¡£
¼Ü¹¹ÈçºÎÓ¦¶ÔδÀ´µÄ±ä»¯
ĿǰµÄ¼Ü¹¹ÊÇÕë¶Ô¸´ÔÓDesignerÉè¼ÆµÄ¼Ü¹¹£¬Èç¹ûδÀ´µÄDesigner±È½Ï¼òµ¥£¬Õâ¸ö¼Ü¹¹ÊDz»ÊÇÓеã¸ßÉäÅÚ´òÎÃ×ÓÄØ?ÎÒµÄÏë·¨ÍòһδÀ´µÄDesigner±È½Ï¼òµ¥£¬Õâ¸ö¼Ü¹¹¿ÉÒÔ´ÓÏÂÃæÈý¸öµØ·½È¥¼ò»¯£º
1.¿³µôÊäÈëµÄÎÞ¹ØÊ¼þºÍÎÞ¹ØFeature.ĿǰµÄ¼Ü¹¹Ìí¼ÓÁËһЩʼþ£¬ÈçDrag,ʵÏÖÁËһЩºÍÕâЩʼþÓйصĺËÐÄFeature,Èç¹ûδÀ´²»ÐèÒª£¬¿ÉÒÔ¿³µô¡£ÒòΪ°´ÏÖÔڵļܹ¹£¬FeatureÊǶÀÁ¢µÄ£¬±Ë´Ë»¥²»Ó°Ï죬°ÑÕâÀàFeatureɾµô¼´¿É¡£Ê¼þÒ²Ò»Ñù£¬É¾¼õʼþ²»Ó°ÏìÕûÌåÁ÷³Ì¡£
2.Èç¹ûÈÔÈ»¾õµÃ¸´ÔÓ£¬¿ÉÒÔ°ÑTool,TaskµÈ¸ÅÄîɾµô£¬Ôö¼ÓTool,taskµÄ¸ÅÄÊÇΪÁËÈÃÊäÈ뼯Öд¦Àí£¬ÓµÓиüÇ¿µÄÁé»îÐÔ¡£Èç¹û°ÑÕâЩ¸ÅÄîɾ³ýµô£¬InputServiceÖ±½Ó°ÑʼþÅÉ·¢¸ø¶ÔÓ¦µÄViewModel¾Í¿ÉÒÔÁË£¬Õâ¾ÍÏ൱ÓÚwinformµÄʼþ»úÖÆ£¬ÓÉViewModelÖ±½Ó´¦Àíʼþ¡£ÕâÒ»²½°ÑÊäÈë´ó´óµÄ¼ò»¯ÁË¡£
3.Èç¹ûÉÏÃæ¼ò»¯»¹²»¹»£¬°ÑInputServiceÒ²¸Éµô£¬ÓÉViewÀûÓÃBehavior´¦ÀíÊäÈ룬Ȼºóµ÷ÓÃViewModelµÄCommand,Õâ¾Í±ä³ÉÁ˾µäµÄMVVMģʽ£¬µ½ÕâÒ»²½Ó¦¸Ã»¯µ½×î¼òÁË¡£
.NET¿Ø¼þ½éÉÜ
ComponentOne Studio Enterprise ÊÇÒ»¿îרעÓÚÆóÒµÓ¦ÓõÄ.NETÈ«¹¦ÄܿؼþÌ×°ü£¬Ö§³ÖWinForms¡¢WPF¡¢UWP¡¢ASP.NET
MVCµÈ¶à¸öƽ̨£¬°ïÖúÔÚËõ¼õ³É±¾µÄͬʱ£¬Ìáǰ½»¸¶·á¸»µÄ×ÀÃæ¡¢WebºÍÒÆ¶¯ÆóÒµÓ¦Ó᣿ؼþÖ§³ÖµÄ·¶Î§¹ã·º£¬°üº¬Á˱í¸ñºÍÊý¾Ý¹ÜÀí¡¢Í¼±íºÍÊý¾Ý¿ÉÊÓ»¯¡¢Á÷ÐеÄUI½çÃæµÈ£¬ÎªÆóÒµÓ¦Óÿª·¢Ìṩ¸ßÐÔÄܵĿؼþ¹¤¾ß¡£
|